Recent commit to Processor.cpp breaking old project
-
The
getNumParameters()function has changed which is causing an issue.I have a MIDI processor which in its script includes a reference to another MIDI processor declared later in the chain.
Since the change to the above function the first processor can no longer see the second processor's attributes at init.
-
@David-Healey can you upload a snippet? Processors with dynamic parameter count should rebuild their parameter ID list but that looks like a order of initialsation issue.
-
In this example I add a knob on the UI and connect it via parameter/processor ID to a knob in the secondary script. Upon reloading the project the connection is still shown but doesn't function.
HiseSnippet 828.3oc6VssSaCCF1tslQ6Nnwzd.h3JXBM0VZoEMMQG8.qhUnhvP6NjqiC0pI1QItLJS6t87rmg8pvavdC1rSRaSGkAqab2xEQ5+7m+82us65KHzf.gO.l63QdT.7QHyQbY+58wLNncC.7AHIMPV.r6HObP.0B.go2SaDlMCH7666rK1AyIzop.fSDLB8cLWlbpVuZ6ybbZgsnGybS3coZsIBdcgiXnBHoQ4AdXx.7YzCvZ2Rg.uEGzG.eAp7lUqPoa2iVofMgXUF2qRohUpVrrcuRaUMeuhXx1EKkm.fK0zhIE9lRrB9.XlcEViL6K9HOp.mvBX8bnZgB.SUkiT2R3XoWhZsf58YNVcG2gB.przcZ+JcT+54nNLK1D8S6aOMzfwzHR1.golEdomAdERBu7If2bfTpDPJSDjVAYR7YdxoVz34gn1bI02Fq1mRBkHeAvugpKTNvkuzEOf1xWILIf01Je9MLT+V+U1C4DISvMD7CDR5g70VO2mxkM2myY7qlrsmqMcY7ENNT+4ZVSM7+cAtFenaOp+FFmicFRm3nZ4OaOEcy8zja4jnUcBGE71bl7POJ+lHBf3Vkp+CiQkxUYX2+IwceSGlE0GvrziP6yE8J.BA7XZ+W26pc.uucCrDONMpLpphG0WxzK.XC54pgnnM0rnFzfARgWnutdBtt9vku0hdwj4rZGUazDACRMWlkkCsqHfoavIGdCjTOS1kiwZsqt7K63Md82Vk7mEWuDzaOruZZUQXz1WBMPUb.3tRNmS9lOGUsaEHMzI230FiIrXKK8ZcsU05W8+bzEgiFuiMCEM76ulhtzsUyKRVuQIE9yXnygsoNDVXMzAKm8jY88WwFz4MIUSelGWUuQIue6e1w02UHtBpKSR5OeLlZNXTeSv8.Fiuj6wnl11ThbJ.yfZ8g6maz.GIFJY7y5fk9LE0.cvPWS0CCHTU04bpidrAlRSvijyqk0c.SJ2JT3GpuXiEzxvXiEFaD3hI9hSIQiE5qQWNTiBS7vmbjE0QKaT35CDJNI6TBY1Tcs.KtnAt4hFXoEMvxKZfasnAVYQCr5sGn9QWuYnT3FM1..c51L7.LHrIGqXfgrUvOAvOSfvIn this example I have two MIDI processors (script1, script2). script2 has a knob on its UI. script1 has a reference to script2 and during on init sets the knob to a random value.
HiseSnippet 853.3oc6V0saSCCE1tsdPK+HlDO.Q6pVzzTaW6ZmlP6m9CTMZWEYLwcStNtqVMwNJwYPGh63AgGE3ddI3Mf2.vNIcME5XSULwMKWDkye97ky24jS56IHTeegG.l63ItT.7gHyIb4nFivLNnSS.7dHI0WVBbvDWruO0B.goeg1HLaFP30O18.rMlSnyTA.mHXD5qXNL4Lst6cHy1tM1hdLyIg2U1qCQvaHrEAJfjFUD3hIiwmQ6g0tkBAdI1eD.9LT0MqWiR2d.sVogDhUU7fZUJWqd4pCGTYq5EGTFS1tbkhD.bkVVLovyThUvG.ybfvZh4Hw63QI3DlOafMUKTBXpxbj51BaK8qnVKnwHlsU+oUHef5T5OqdkNpd8TTWlE6R8ypaOIzfwrHRV.golGdomCdkRBuhIf2BfT5DPJSDjVEYR7XtxYVz34AnNbI0aHVwSIgRju.3WPMDJG3xMbvios8TBWFP9sJVbcC0sB6LLfSjLA2Pv6Ijzi34Kj6C4xl6i4L9cSCGtPa5z3IrsodKzrt0v6uEXddfy.p25FmisCnW5n50e9ZJ5pqoIobRzacBGE7Nbl7HWJ+pZD.wkJ0SuoSSrDqHBXrNketTOISCAXS54pwfHZIKpI0erT3B.2TNKKxOTaoEwXofPjB79RiHmJa7bivY2MNiJmqoL+ZwdrVgcxkK94M7ox8kRO1f.IM+Tki4hAqazEqNEOL2R3juvcb9+ENu7BmR+ZLkq4IEeOcjEaYcnRS90z5UrrwcT1bTVDSoPkxUYXw+wwEeSalE0CvTU4UP5pGHDuwKm9buxea2khu0953J35zCW45x46St5bRRAGlkkMsuvmoKuIs3KotlrKlB0899EeZ2Ezko1CIrBrwx4WNoWgGaPetI60ze1mqx2jjq3+msw5lBwUQ8YRxnEiwTK.iJ941.iw64eDp0vgThbF.yfZ+1amk5fWKBjL9YpOC6wTsFndANlp+MhPUYmyo15wFXJcCdjbQsrtBXR4VgB+TcEarjVFFarzTi.GLwSbJIZrP+mD2OTiBS7v+5JKpqV1nzbCDS6IYmRHyeT+QfkW1.2bYCrxxFX0kMvsV1.qsrAV+5CTu6e+.ovIZrA.51uU3GvfvVbrpCLraE7K.FmFX3A -
@David-Healey @Christoph-Hart Could the fact that not having the
MIDI Learnbutton available as parameter be related?
-
@ustk Has MIDI learn ever been available as a parameter?
-
@David-Healey No idea, it's an absolute coincidence that I'm working on this today...
-
@ustk I don't think MIDI learn is related to this bug
-
Another issue I just noticed, CC mods don't work

-
@David-Healey Yes I've actually fixed that already on my local state. The metadata switched the default value parameter range from 0...127 to 0...1.
-
D David Healey referenced this topic on
-
Similar problem seems to be present when using Script FX in the latest version, it's unable to find the parameters in my script
HiseSnippet 1221.3ocuWssSiaDFdLjIcIaWT2p9.3xUYqVAIPHfzppMPHoMc4PZR1svUzI1iISwdFK6wa2TDR8MnW2dUeKp5c7.zmkp9Fr8eFam3.YgPDs9hnL+mO9M1sCDVzvPQ.xnPug9TjwGi6NjKGTe.gwQs1CYrL9.RnjFXFSZ2g9jvPpMxvXwuRQvXobH8y+7xcItDtEcLID5MBlEcelGSNlpesWwbcaRro8XdYjtRsVVBdcgqHBhmEwkP9DqyImQOjnDaAL5qIgCPFeA1tRUJoREaK55NzJauY+s1XisspVojcopqS2rpCozlaUwoBxHeCalTDzURjzPjQtcE1C6NP7i7XG7FVHquKUcnLpK34XxMEt1pTTQEUe.y0tcZgJDAVo83x1hwksOCe.ylMh93x2mnYXNVirEPiElL7Vbhvq7GJ7lRHYjIjxEGROE20Jf4KGyQEOOF2hCcSGBzmxFJwxhV3OLv0EfDb4pdjyoMCfCiznX0RkdtI7yydQgBPuJTZFqWyiM+RS8fypmQkMbbnVxhqDyyr4wqnjes09byWwE8Kmno9+fZotCTrtvyWvgCEWQyUom9OqFpXxkAB25DW29vbQQAWyJgrxCLtKiSMch3VRlfaNoDEsRs9yMeKwMh9rBWTXoz3W4gcjx.V+HIs3HppQ7TweQgKKjw1GJjzi3E0VA3XdcVNNSkWRz3RClJa0JQvsoXQdjWeZP1bPIHz1mbVJ+rMKYEW8yHnf2hyjG4SSNe6KCnj1mZFLIBAQk5IvkSl.65xroAHFXjOBqaIHcvmr5+8NNKeE50s1iHIolArH3EeZfjoRFi8nuE.RhGrWBuGM7bovWKaROEY7j6zouaLVyg0FN5vO+s0BkCUkl7ZAQdLaaWZaQHSU5Gqz5WA.g9cY+jNx+seU87muzKKH3IW4QdWV.vvHGGFPAiMs2E4vb8BggL+Vd.tFx3SwuNjZZScHQtRyvyASAivmSs6Iz.ddB6jD1h0m5hP2bMG.XD1QtD4jnNpA2DFpbH6ptZclC41vrX2WGJJ2Gd7ozLiTNqg6SwsYRqASOdWXJwKLl7ec7l.r+DbLZ13fMGt4w2JJ9CRnLMD8B3TboDn7Q.rSCJ23H7EMNtWiNGty9m1sdmVs6c4Es6bz2znduSadz960nykcFP7CE1rP4Z0EAz0Rs+ZG.yiLHm4bpqZTZ0e.RL7CzsUnNhHIie1ADXUPsabXjWW3ReKZhGU9xXAE3R74RpyptdWJ2Ve38vSByxpyFILKmxLCtTtY.WJudgYBXI34QWglAcg9fmPHG.Yz0LPMQMzLAJ9cLa4fq68SlIkWBm9ZWWSc3YtvTykASc46pfo5dFE.WMLsEcGPo4+62G+begRKV6gEJMQx2LkN9LbkR1dttF76ydMn.FV3HvlhMZpEgLYcseYTVCov8MkmZJByjwkh7X8qemMee7cNhpy0pF2i9scxr3DMS1CdZEusLCctw6K5b4utG4x3K0yz1Ru.81lcOYT5tHd+4bxEiaS3++.c5QrBDmZEi8ntK5QZJPzy0eI1RvmDBmMKeSHGnlwN0xZRScCEWedUbi4UwJyqhaNuJVcdUbq4UwsuaEUeK5NQRgW7aYgPGztg9JBCiF7XHI3EHP+aEpp1y -
@David-Healey hmm, works, your snippet didn't include a network with a
Gainparameter though - can you load this one?HiseSnippet 1534.3ocuX80TabCDWmMBBNoYZloe.byzGb5jwXCDfYxzACF6T2veb4bnvST46jwpbmjm6zEvMMS62f9bdqeM5a7onO2OB4aP5Jo6ruCLDOdRiYFvRq1U+Vs69a2j1ABGZXnH.YUnyvATj0Cv1C4x906SXbTqcPVODuGITRCJZ1Z6gCHggTWjkU9Wn1vZw4P5OueysIdDtCc7VHzQBlCcWlOSNd2A0dIyyqIwk1g4m5zqVqkifWW3Ih.7jGWAMf3bN4L59D0wxgQeOIrOx5awqs9F8VsBsJwoR0UVaipqubkkojUd15qub0UVY8Uc6sV2JNarLxZ9FtLoHvVRjzPj0baKbGZ2WbA2bAGwBYc8npEUQ1vMa1tovyU4hpcQ06y7bam7PEh.qzd7yVdyy1Wg2i4xFs+3muuTKn3XMR+.ZkKK7xmAdUSCuJof2DfjUJHMmAROBa6DvFHGKQgm6iawgnYOBDmRCEyYQ49GKbcAbBtrrO4bZy.XwHMJsVkJOsH7qm77BEfXUnrnQulGW76JpSbJeFU1nWOpirziMxJ173GqN+RK80EeIWzsZrl5uCpkbcfh0E9CDbXQoGqkpzS+kxgJgbYfvqNwyqKjWTRv0hh2VcCvWCEdzxCBXfIRPVYUZpRLi6w3zh8h3NRlfWLqAJ4jb4Os3qIdQzmT3MEVbjQ..rkTFv5FIoYMcxwedg2VHks2WHoGvKosBHo30E0q2DkEiFOZvDEqpXBtKEKwi76RCR6CpCBYEYS0v2dpV5JAGSvI0AE7Vbl7fAT9sUefhinpzxXTAGUpSJeXbRosGykFfXPt2BXcX.oAbLav+9geeyqPup0NDIIwLfEgaY.MPxTNf0NzWCbKlb8Ew6PCOWJFnOabbD3z9nW5kioe1u1vQK9ierlOy00i1VDxTOviO1xWArgCrY+ZBV+q28t+dS+zLgmbkO4xzrfgQ85wfcv3htai7EtwP1g0k5gP2r1EXMDtQdDYVpDU5Vr.ElRW+ppQ4.VGllP9SF+xzBwGgayjN8mLFyMALBA2+OvXLq7WfMTQiA3b3lG+4iBt.NgoHl6cDi3j3dsN.+lFG2owg6u0tmZW+vVs6712z9vC9gF06bZyC1cmFG91C6SFDJbYgxkpKBnKkX+k1KxSx.+jyodpzjx+R3M59ke5p4mvS6ghHIie1dDfATkGuejuMzk1gFeiJBEqbpRey5Jp0pnqMk6pW7A3Srvpp0VwBqlHLEqwbSAqw75hgLjFvm6cEZJzEhC9BgrO3QWy.0D0PSEk0Owbk8u9sexTo7h3j4jtl5JNHp7BQv45zo3uirtmI2ITanS6cIZKOOwEJZNVbQFjCo2qsva3f9BNyQsk4DIgns7EQJNQSbZbE51dBmyMzYlPFLjUGBySUvZGEB77tGvsA6nmryJ+QzfP8ct.tRY3Gn.deMg1BMINPx1v1D3kAXBTsNfPDMnrynxuzdQ5J.yDdokprYxnfFbAtiulUGFDTkD2lD.ZASlnZFjyJeplClhQ0JfpIm5he.tU3QJoNDOzQl2c3gPcKlGasKLu5nXrejGJiyT.6C+srZ+ahZy4ua7ZkKM5PoftBpIqfWf8X7itdVwdjKu1dueS6r8fzerOmdgA1oOoxkV.aLPG5kxNB82gD0WC3Qeo3Wwco8fPkKfryLiZaG08EAhnA5E2352g1i.DN2X+shjB3oxP2e6tYAEnhqf+z6wPtc1HQiKgakS7R0VBBo6vBI.62s4yYbQyHHbpdXqvrKiK.Z4ljJLxQa4N9oGssPbtOQWaOaC1LWpAat+GiWL03GeSsL8a+zMWSoZ28bMtSLIQSQOxQVbpHoScotSm2.ybMIuIE7q8m0lH.gV.FGYdr9edZZztvGsivX6+ygSGROoVlGU1jQko2xTLX63tKiM5U+1L9noKmtqTfSFkBjGuabB.F2lv+7LxfOwIPbpiomqpr7d5c.zv0TyKh2SstX0a1pEdCXm53j0T2PwkmUEWYVUb0YUwmMqJt1rp35ypha7wUT8eZRbyDUJJzRncCMmokUCtg1FZ.i9ODdN.kA(the 300 extra bytes indicate that this includes an embedded network).
-
@Christoph-Hart said in Recent commit to Processor.cpp breaking old project:
your snippet didn't include a network with a Gain parameter though
You don't see this?

With your snippet I see this:

-
I saw it until I added a DspNetwork with a Gain parameter.
I totally overlooked that you added UI controls to the script FX like only a madman would do... Why?
Also the script FX doesn't contain a
setForwardParametersToNetwork(false)(or whatever it's called) call so they are dead in the water anyways?What's your use case? I think there's a valid issue with the metadata system only looking in the DspNetwork to build up the parameter metadata list (so the fix would be to also check the UI controls in there.
-
@Christoph-Hart said in Recent commit to Processor.cpp breaking old project:
I totally overlooked that you added UI controls to the script FX like only a madman would do... Why?
Haha, I'm using the scripting side of script node :p I made this years ago, I didn't need any of that fancy node graph stuff.
@Christoph-Hart said in Recent commit to Processor.cpp breaking old project:
Also the script FX doesn't contain a setForwardParametersToNetwork(false) (or whatever it's called) call so they are dead in the water anyways?
I don't know what that is, but the effect was working fine up until the latest commits. I'm not compiling it to a DLL, if that makes a difference.
@Christoph-Hart said in Recent commit to Processor.cpp breaking old project:
What's your use case?
I wanted a simple gain that can handle multiple channels.
-
Did you use the actual processBlock method where you shuffled the buffers into a Libraries.load() module?
Also the script is completely empty, all you're doing here is declaring some parameters in the XML.
I wanted a simple gain that can handle multiple channels.
If you were stuck with the "script" part in scriptnode, use that instead:
HiseSnippet 1249.3ocuW8zSiaDEelDb1krzpcUaumaksBgBfS.odfPHv1nVfHbJp8Dch8jjQwdFK6w.oU8du0y6s9QnW6M9Nz9AoeCnuwyjDmD1.Dw1fDxu2ad9868+wshDtz3XQDBWr8vPJBulkyPtr+g8ILNpYCD9SsNgDKoQkzrpOLjDGS8PXb92oXfWcET5u+c+5DeB2kNgEBcgf4R+NV.SNgaXsuk46eLwi1lEj4z10Z5J3GJ7EI.dxaUFERbGP5QOknNVNKz2Ph6ivekkmcUJw11yktcWp8dU5r6N6rmaU6xdkqtMsR0tjxU10tqMBW3HOlTD4HIRZL7RqK7F5zWbMWafKXwrN9TEwVHGvxZ1nC6y78ZMJ3DiP3UZMITkWGp9bqSXdrw7mDxdcpfRSzHaPCmaQPZqm.jvYfzJZH8FKG2HVnbhDEddkUSNjA6RfbSVnnOKBeq0gB3.b4lAjAzii.hwJrd0xk2nD7u290cS3tRlfWRvOUHomwW+sE+khqV7WKVZVQc6duxTlIR36SitWwpxgnEo357jfNznMJcEwOgN9ff6OcLsviKl5p85LGTvaxYxyBoF5iE9dpXk544y.HSXCd56a1fHIpjhgGbtPZjjofCtA8JnMPmhV0pAMdfTDhPym+fJGgWhOQNc4jpQyH.hGSkCUIJdLSNLai3SnFq7BqwdrP7MVsXR292OFycOXDhTeLvnoy7SrNpaWpqbB.Ww53eXYaCK+jaCKZZCAap6+zjklACi5+9MqI05gQzPRDssnkOY35wjfPe54.D2nTGeg6.G1OSmuAITif5pSrtaeBmS8iWl9nBOSylPmKRjLduSHxH1MPB4zj.GXrtK8PC5PXKbAUKjltrhVUV3P4doD2A+LB2RQiMB2ZFgaqnyYDt8LB2QQm2HbmYDZqnWwHzdFgUTzVFgUFILSG+oT40hnAoU.lmQ3WpS2woI1K6dC5.eew0GJBBYl9BHsmxqkveXXeAm4pXoOwnfyAAhDvFF+ZRSU8QU.iBVv9v1DlupGyIIFlZ4cF2AdOoKgw4ufFEmZyWXUdS3Onm6TgGH5EGSbgz7vVDYeUyqZPHzoPi1zcbGSVuHaQqdYbVop24ns1ZbAtSfJJo1YqJeZQh.sfMJpgg4v4yLbT2+nnfoC4TFdMqlwWnj5R7QWnJPUJkZEcvN0EJnNZAqdJ3Nk27Jvahna1a1KqnwsQiECYbtr.DkA8P89XJvTmv3F.NZt1Od6IjalgGTCIog57VJu+38u+u12Y.8ZMvMbus2e9E0zdU5EqZSuQ1Vj9tfptq.3nroZ8gKqC0GfUO8shbR57tHQRXJwb1tAsKIwWNG+CRjh.nMOcBMJiWUbduBJBm0qp860dTd0O8YM968MCACDBYeXpvGv0JXkdevGkeYW698K6ZOfq7bjfVy5bZL0X5Oxoooq9vYbt0xTq776mvTmoaPN5Fvpbhelc7vdtFrXBrQv6C3lS4UOXnJKb+m6t6KuM81TbZ51qXykqLjlYYM8F2SONzn4kFWP0EhAAjzwzK2cz9edQFZQKxvKZQFZQKxvysHKf3FItzUee.Ur8kobfAb7zAkqBe1GPWZKzUyVDE.ebykttS+plSwsWVE2YYUzdYUrxxpX0kUwcWVE26gUT8smlg6p9DX1cqiRK7w3i35lUXcH5+.8tIYVB -
@Christoph-Hart said in Recent commit to Processor.cpp breaking old project:
Also the script is completely empty, all you're doing here is declaring some parameters in the XML.
Not sure what you mean


-
@Christoph-Hart I saw some scriptnode related commits, do any of them solve this issue?
-
I was able to recreate my 16 channel simple gain in scriptnode, not as elegant as my nice simple script though.
HiseSnippet 2252.3oc6ct0biaaEGGz1P1V16ljI4g9n5aNc15g2Dk3zGZVeq0Sq7pYkqadaGXRnULlhPCI0tqZm9d9XkOR8aPB.uHRQKIKhrwBSKzCdD3AGgCO3+A3mksD5GRbvQQjPfRyamMACTNFNXVP7nyGg7B.WeAP4kvdnnXbXqzKc1rInnHrKPQY2+B6BJGtGH4w+8OeFxGE3fKtD.bGwyA+28F6EWb09e2eyy2+JjK9Vuwk5s42csCI3bhOYJMd1EpBlfbd.8d7MHV21AB9qnnQ.k+.D4XnopZZ4ZbOBcuqts4PrgkkolwPaUSjMxR01R0TCnz3RWuXR3fXTLNh9hdFwc1fQjOFjN.24E4cuOl0PCLfNxoWFb9HOe294ImH.PYu9EopcSSUeCrmmq27qWjx9xDCsJ7nbRSYm0ERZ0HjTJER6kFReEbfSn2j3BKr34H30AzYvgH5bS4PIsu.keBdNg1gf3SGid.eUHswbGNwRU8Usn+3a+SCmF3D6QBZQBtgDieSvIeay+cyCa9eZ1ppogCWpM1vDR78wgK0LSNDtNGOIX536wgup0GP9Swy6H81ewbZiMKm5jdWWpijfqC7heyDbV6qH9trbE64OdF.jk1nO6eb8EnXDaRI6Zz9MAGF6wBGkKvefVFjNEcH7BbzCwjIzBgGM+QUND2o9n3EkSrBsLCz7wBygrIpfHu3YkKDqgFScsZrMMD+JXeuXmQKOF2YIwHMS8aQLlUY9B3kCGhchKBv8fW887VFpV6xvlYkgzwjM3Gm0r0Ueu1RK.+QXgXeRHdBJDeKouOZ1IQnwS7wukFiup089DmGF38uvOtBYRZHbFqGm3LBEDf8i3oPpwmoEm.ukLM1K388PwgdeBn76uY53Az00cvmmEc.EnxWxpgRaqxZyzECvAtIM9Y5iLiZr1JYF0pXTm0dmLi5ULZvZualQiJFMYs2KynYEisYsgYFaWwnEqciLiVUL1g0d+LicpXrKq8AYF6VwnMq8gYFsqlDRxJMyyBOJGkjWNJ2b0rjVRl43byUySZI4lWjatZlRKI67xbyUyUZI4muH277rUoEHuAG+QR3CIELYOGnb.q532A6M0O1K6kZfGSvmPVbGNLhsThx9PsSUOUE7ZeexGOmLdhW1hLIxvzKjqqd8XxT5.RK30rRcnOwe1jQj.OGVIWwRTmkWNkq7nzE2h77YqXMXZDcO.22DLf9JmfzvVw3FhK8Y6eExgVhLqOJdDakO1tHzvEGdpy7kaV48TQ0OqtIErYkclU30GER6Dcy3nz6VVLjiHkF1z6+wrbLCPRYWl8zjbRv1fEM6CGyF.vJC7TyKK1xccSG1CVXXSSHOQ9Z4CapsMcXgkF1Fv2+nQ8H5nFhO88qd7XlTepwamRyFT2m2hde2yK3N1ZozmB+iT3TpbsG5SYWBBYsGDimjp29FZaZeRdnYZqpoYQWN8A7GSCZfxWCaepottdG0NcL6R4ZUsAo2aIBiaweJ9VRxKNsB6CTNCVLvHKb7tG6Cd8zXxX5J3YjKWfGhnyhoACc+xkF1owXQLe.jEg0KrYcvPUS0f1Aa6tl1cT0xHPGLlPhGQ2QXEAeCXxuLP1f2.pyF5EB77KBd9S6GCeKNBmEGOUxegAew6fzqAJwFB.kTtGAGG8N5xMrqrf78qggoamdZQGVlLt7KPcjxKKh1mEQGjV9qwyRGE9VBhdSKn2oTZ4fjhScKdJo03ujdegpjthBZogoHVBCd9yn7WstxJyTwTGdTfc9eEEXkMUjZvmCM3SsJcw9Ft3mXeirNrx8Mxr+qceijHpI7GlvnYCqrywKg+fazjSyLtzXojq0pvYmRSxvhI4FzI4JSwr1rfDB6iB1bVoFqVjCgVKHaJFiFv2N0GCVXrqxDns4y5IuYCrVyn2vo5rqitiY0AMWGQ+kgKMUbXJJsl8yMGd5xeFOy6ZKAwkf3+pAweQAGsloffheXFNcaAfE2n6+WSBIYw2lr3YRv1RXbILt.Bi+hBV50t2wyIN9Q4L05FRdbAgGu61gG2jmkM0k73RdbAgG2Pv3wMEAdbaIOtjGe6xiaH4wk73BNOtgvwiqK4wEDd7NaGdbtdaLLj73RdbAgGWWv3wMD.dbSUIOtjGe6xiqI4wk73BNOttvwiK++UQT3ws1N73b8eYpojGWxiKH73ZBFOttHviqI4wk73aUdbcaIOtjGWv4w0DNdbUIOtfvi2d6viqyyxlsk73RdbAgGWUv3wEgOKml5RdbIO91kGW9g4TxiK573phFOd0OEgRd7sFOt4yMOd1eWQtdCxsj.4Rf7sHP9wEzz1BFOtpHviaH4wk73aWdb4mmSIOtHxiebALssvgi2UhiKH33FaIb7m62FCINtDG+yINdWw5a5PaQfF2TRiKow2tz3xOMmRZbAmFuqvQi2QRiuMnwW8rzJWtoYoEC9suJoGws7oZykehFCAH+RmVFTgvEdQn68oyLKlwny80plJ4.HI.mbdOj7ExdQyLViqcm+cj97LR50RRGfk5P9m6z55gYs8ncs8vp1dnWCOl+m8n1tzY4tTUFtO7e54RWuP30gKDJOknbyzg4bC0N21t9tXTeWzpsK5102k5e6qW+aecimTMl8mkH+T75I2V4yibJg.pqpcacKCqNZc6XZaugpmR6dtv8V5dcKOaT9qBMNbRmGm3J7T4vIMadbpKON0YoNwy12mQHOLFkbzvv2wn0y7QMDXcG0PJq6nFBrtiZHk0cTCAV2QMjx5Npg.q6nFRYsG0Pf0eTCor9iZHv5OpgTV+QMDX8G0PJO9nFZLxIj7Nmzy2Jl7qUxUnqMEjfZeHrGqcKMvGRkdEGEYi8b8dmiyhuTOxQcdczfWGM40w175nEuN1gWG6xqi100wl4B.Ut8TiaO041SCt8zjaOaysmVb6YGt8rK2dxsFRmaMjN2ZHct0P5bqgz4VCoysFRmaMjN2ZHct0P5bqgL3VCYvsFxXCzPryt1r2mHF7G.zq+kITYJJWFjxxqnrK3W.XAYbxEEdit: I just found a real downside to using scriptnode for this purpose. If I have a project with less than 16 channels then it won't process any of them.
With my scripted version the number of channels is passed in the process block so I can work with it dynamically.
Is my only solution with the scriptnode version to create a separate effect for each channel configuration?
-
@David-Healey A compilable third party node should be able to do it when loaded into an hardcoded FX. This is theory though, I've never done this...
this way you could do it in C++ -
@David-Healey Just tried by curiosity but it's still half dynamic, because you still have to hard code the number of channel (
getFixChannelAmount) and recompile the DLL...Weird there's no way to get the hardcoded FX to actually fix the number of channel in the function parameter, @Christoph-Hart?
// ==================================| Third Party Node Template |================================== #pragma once #include <JuceHeader.h> namespace project { using namespace juce; using namespace hise; using namespace scriptnode; // ==========================| The node class with all required callbacks |========================== template <int NV> struct MultiChannelThirdPartyGain_custom_node: public data::base { // Metadata Definitions ------------------------------------------------------------------------ SNEX_NODE(MultiChannelThirdPartyGain_custom_node); struct MetadataClass { SN_NODE_ID("MultiChannelThirdPartyGain_custom_node"); }; // set to true if you want this node to have a modulation dragger static constexpr bool isModNode() { return false; }; static constexpr bool isPolyphonic() { return NV > 1; }; // set to true if your node produces a tail static constexpr bool hasTail() { return false; }; // set to true if your doesn't generate sound from silence and can be suspended when the input signal is silent static constexpr bool isSuspendedOnSilence() { return false; }; // Undefine this method if you want a dynamic channel count static constexpr int getFixChannelAmount() { return 6; }; // Define the amount and types of external data slots you want to use static constexpr int NumTables = 0; static constexpr int NumSliderPacks = 0; static constexpr int NumAudioFiles = 0; static constexpr int NumFilters = 0; static constexpr int NumDisplayBuffers = 0; // Scriptnode Callbacks ------------------------------------------------------------------------ void prepare(PrepareSpecs specs) { } void reset() { } void handleHiseEvent(HiseEvent& e) { } template <typename T> void process(T& data) { auto gainFactor = Decibels::decibelsToGain(gain); for (auto ch : data) { auto block = data.toChannelData(ch); for (auto& s : block) s *= gainFactor; } } template <typename T> void processFrame(T& data) { auto gainFactor = Decibels::decibelsToGain(gain); for (auto& s : data) s *= gainFactor; } int handleModulation(double& value) { return 0; } void setExternalData(const ExternalData& data, int index) { } // Parameter Functions ------------------------------------------------------------------------- template <int P> void setParameter(double v) { if (P == 0) { gain = (float)v; } } void createParameters(ParameterDataList& data) { { parameter::data p("Gain", { -100.0, 0.0, 0.1 }); registerCallback<0>(p); p.setDefaultValue(0.0); p.setSkewForCentre(-12.0); data.add(std::move(p)); } } float gain = 0.0f; }; }