Modulation does not work when processorID/parameterID is set dynamically.
-
@Christoph-Hart
Hey Christoph,As the headline says, modulation via matrixTargetId no longer works if the processorId/parameterId of a slider is changed dynamically after onInit.
If you change the effect when modulation is set, even the entire slider stops working.Is this by design or is it a bug?
Here is a snippet to demonstrate the behavior. Just change the effect and neither the modulation nor the slider itself will work.
HiseSnippet 1996.3oc6Z8zaaajEmzxLNRsaay1TjE6hEfvXOnrapgnriSBJBLiksREpcrPj6eVDTjNlbn0TSNCK4vr1XQt2a87dauteJ1uBEneA5o83h9MX22LCE4PIYaUi3Xm.qCBZd+Yd+lYdy6OjpeByCmlxRLLar6QwXCy20ZvQT9vNCQDpQuMLL+CVogLd2CGDR7wI8QInHLGmrKNkar9QwnzTrugoYsGKTvr97FxO+xZqiBQTObIICiufQ7vaQhH7Rp8c+LRXXWjOdWRjlzq31yiQ6vBYY.3pY0xHF4c.Ze7SPBwlyx3SQoCML+yV2E2B6b2UCdvJdn12qcvxK6sb6Grpumev8Z4b+UWwK.ubf28MLu1l9DNKY.GwwoFlyuNy+nACY+Mpx.eAIkrWHVLvwX.XYE4trPewRTP0nyPRne+Q6ZoFFlKzubOrlZO7lVaS7IEzK2K+.IC6RMz2.MmqJ7pUAdN5vqkF7lBjL0fz7JHcCqAdIjXdIGAddGqdT3rL.AmS5PQIqwb+TMqNLPBJeoHzA3tIvfBMZtZqV2wF951eRiFvYUJ29EnD6Oix1y9g1izaeLuCKJlQgAMWTvzYwREDtVfvRWNgnCDtZeUyEEzGSLXV1icrSbgDBsJFrTpPHJOgE1AEFtG3A0DlvQryYUZGbP.1imBV4YK1YHKIKcw6XuX+gnTb2uZwutQCBMjPw1AYTONgQsmbxZ5MBT2A1NByv2tweuQcgTBvroz.MysyyjBX+w1NeMfg5gLOTXNF.HH0QrJyRRfoKWUgfMpSBZpz8gOz1YoV2tQcvH0E6tBqzbwHBEPdqkDmMUniNDn6LIchueHtOKkHVVRUu6XhDOxyomOvWgRA754271iK5nfDiI5i37DxdYbLnSKoRub7ES6icwz93VMsaAeN8UjypSQpyoE0K+jFZtHOgww6PaJcDZ7xF1iyJHXp7xcnBwISksHbYxIoXSZVzd3Dc2PgfPHgpwYrN93L5gA8T26zDjQ6QI7chwziK3nQ9kUHlzb4nBDkKiH8A4QjjWdVmcnAwWDPp39jgD1ZoObMFeJdu7oPkZRNAKXICwLlxe+O4Z7481.wQhni4fB.ZLNgSD6AlafeAjaREqrt0F3zC3rXIpyuMCYOlQbeXgYc+V2iJW.+UWBGGkJlAUrkF4AVL.+X3XvbNC4NVgAabpqxRS8yGnYpeL0sp6eIH9GtQHve8vcQIR2bvtVQLeCsKBBKJVMOeD7z77E0GzMA+cYXp2QNFQ5o7WwUtNz1xmLMDj.j4mEh3UyJJpcHmg.s5ohDoanvp3H8ZKdkkpbVg3Mr5S3dCmNFmaJXT3weNfw7BL9MVprAk.bdK3f5boZBcyeck4+8VONjsGJrbiBtQAHAqpp3Oly1tfucg.NmPMi+3rVyX7LWy33w5le1h0cJk7M+ktR9lU+3ObhilzWi21pTX5MTvzxZqt6juSA+pDXNmNvVmDyBQIB9EAkx4+Ou0+5+tlvCoWoCl6O39knWfCXIQ4A5Klosv6C1TmxtXHNLTWpmty3fHFiOjP2upe2Mc2hwh2jhfcAe8IQFAExuCEPTR9mWSLs6x1FkBwT6.U8cftM5sOkkfU0LnSuSVJmEMZAH6.Z.GGKSpY9LqUWYI3SveQ78C5.es7NuZF+qIPlyIe7O2L6kJ7DJNxE9DWByInPYgi2kTTdhYtp81clqmxx3vk0skU7.gZdRVz.H0fGFrNkhCSGU0U93Vhwx64Xpubv+C9jyzQL1LmoyHlFpIWqzRJ1SUx0BiWiEbFTfZAJ5Q8wGpHncNXYAsmY7nrCyYeMqOtfflPPuLfVu.JfUknpUkc62uxCy4wIrrX4l8MUDvojTbhsjtyqhmhyrmQVEkr61UBsgRRHP4kpEbgw+2EtySv4yojTFkIgxihXYTtNny4tAlmQq.8bFChSvnJApEne.FfpubJSqbks14QMDK7FaMDWfkqWo.h5iv3.RTbHdS3xPHzQWdTuMvAnrPdAUcPtM3CDOjQIURt+TLbSd+8wI5PepqGnkejdR6a59TbHFR0WR5O4tETtKJQcm+LsU37q9g7M0iqemkBt1hal1u41k0a24ppbbtfx9W2RjpArnvzumbfsBQmTL6hrYiW2oJy03gRWqnl1SJl24ua5MTquKF+yWGEJLi6CuqkJs03kSN2kiqnPEExjmWfv6VJ38NVhdgjkyHQ1GYMp2H6Gio3jI6g7b+oMriGGfvtIHZZLKE6T8tWDYWFEmVg5XZzdpZTgpx6vYRRUjRrUzE1Jzj65tiH1VmXeDsxjAiqLSaSNTu0UU4apRk1I0C1XD6yU54MKLE+kDe9PGcEKI2Vm7mhR7GuK6ymBtt1UEbcUl6KzSQ3pzk65utkEbktss7nz9h4r70Ql3WyY6yen4uur.mpOo77hdlomN9T5E+WVaZ4qTcyNY9JnYlwe530t5oieUf12HaQpVQKRx+wHRSeM4qsrpwOW5iYgQum3QugTUCZUdoo5nP6MlpNW9F91ccKn1V+0y1Ei82q7oK7MAA+m0pTC1EQyY+V0J8s3tytxFytMhPdIrm6o9yXHbittjBb9Qk+27passXrsyD+ENLhfn8O2yq5TMghsOqJt7YUwUNqJd2yphqdVU7dmUEu+oqnHY7ix3rH0cbn6u9apdAilEucSyZF+emApXt.
All the best,
Oli -
@Christoph-Hart
I just noticed that this only seems to happen when the min/max/middlePosition values of the slider change. If these remain the same, everything works fine even when dynamically assigning the processorId/parameterId. -
@Oli-Ullmann yeah that looks sketchy. Modulated sliders are not supposed to be reassigned as there is too much edge case stuff involved into making this work.
Can you redesign your project to avoid reassigning modulated sliders?
-
@Christoph-Hart
Hmm, my use case is as follows:My plug-in has 8 effect slots. The user can select any effect per slot.
However, I don't want to create a separate slider for each parameter of each effect. That's why I change the processorId and parameterId of each slider appropriately when loading an effect. And I adjust the min/max/middlePosition values. Except for the modulation, this works perfectly!
The only solution I can think of is the following:
I always leave the min and max values of the sliders from 0 to 1 and control the effect parameters via the slider callback.
Depending on which effect is selected, I multiply the current value of the slider by the maximum value of the effect. For a frequency, for example, sliderValue * 20000 (With Math.range(20, 20000)).
This should work for unipolar parameters. With bipolar values, i.e., if the parameter ranges from -1 to +1, for example, it gets more complicated. But even that will definitely work with a little math. :-)
However, that would mean a lot more code and is not as clean as the current solution, which makes extensive use of your API.
Or do you have a better idea?
PS. I use hardcoded effects and the effect slot from HISE.
-
@Oli-Ullmann why are you using effect slots? just use hardcoded modules directly for your slot system, then the processor / parameters won't change at all, you just need to hide the ones that aren't used.
-
@Christoph-Hart
I have the same problems with HardcodedMasterFX. And I use SlotFx because I wanted to use the HISE internal delay for its tempo sync functionality. -
@Oli-Ullmann said in Modulation does not work when processorID/parameterID is set dynamically.:
the HISE internal delay for its tempo sync functionality.
that shouldn't be the reason, you can replicate this easily with scriptnode.
I have the same problems with HardcodedMasterFX
What do you mean? If you're just reloading different networks into the same Hardcoded modules you can leave the processor / parameter attributes constant, no?
-
@Christoph-Hart said in Modulation does not work when processorID/parameterID is set dynamically.:
that shouldn't be the reason, you can replicate this easily with scriptnode.
Puh, unfortunately I'm not really familiar with Scriptnode yet. But I'll take a look at it! :-)
What do you mean? If you're just reloading different networks into the same Hardcoded modules you can leave the processor / parameter attributes constant, no?
I will test this thoroughly tomorrow and provide feedback here. It didn't work during a quick test, but I will create a new test project for this purpose.
-
Puh, unfortunately I'm not really familiar with Scriptnode yet.
Well, then stop what you're currently doing and start learning scriptnode, then you'll look back at the HISE delay module and laugh at it for being so bland.
Here's a simple delay. It uses the tempo_sync node for calculating the delay times and has a filter in the delay feedback path so it gets dampened over time. That's just one of the things that you can customize with scriptnode. You can go from there, add ping pong mode, distort the feedback path or whatever you want.
HiseSnippet 2582.3oc6a07aaibEmzxT9yM6toYQ5QUr8f2h.CKYGuwnGDi+PYMZrspkiSbu3NlbjEgI4vRRYKsEEM.sG1asG2bqmxwhEF8Ruki8vVf.j8Oft.8xdy6+.M8MbHEmQjRVRQ1wYW6.Dn4Myv48989bFxorKQC64QbkjmbmlNXI4oUpzz1u1J0PF1Rqupj7MT1.44icywHsbSGjmGVWRVNyCnDjmXTof+Nq3xHSjsFNljjztDCM7CMrL7ioVV8WYXZVBoi2wvhazKnttFwdEhIoNvOYTlSxAocD5P7lH5vFQQ5yPd0jj+EJGjGcv7UWBgxu3An6ketkVJe06d2Ocg6ocf1RZKpixizW3dUyKImcMcCehaEejO1SRdzkI5MqTibhMaA10vy3.SLsQdoJvJyHWhXpSEQJUoUpYXpWNBn7jjjUJGCaYXv1sT1vP2nE8X36CB5HW7L3AP4QDYuLBrW9NwdovRxbrznLV5CUpn4Z33G2CkelRYcaPaVEA5IdVgMVI4WnrBAFfs+rVnivkbgFslvLKN2b2IG7eexurZcaMeChcNh8lDe7V1y7IS96mbhI+CSlq8tpVM09nKiKwzD6lZ2TSC2tMwYrqac.18N4NFYVG2Zff3KhoY6MLUiI0bCjXutsg+VN3v1c2nPJD1fe8n0WE4inJkPZv3bvt9FT1QdU7wfKASEMgxpXui7INfSQB8GX4Pzqah7EMmnNcgc.3gfNjpnr8L7ax6T1G1Xy0UardkE+PkxF9Z0RmGGIEdDPpKBdLzy78TVqZUrleLCNpRomLntgy02tgSF5FBqIcwmNrYtROIepNfegRrwtiK1A4h2gT1D0bFOjkiIdafGuStCLIZGUw3ywI8PbXrvxzQLiVMjsM1zaPbjxNjBNIsMotug8gaf7cMZ.gO2rtUEHFuFdkPtCnIOB0Gh0dNZapcQErsdPiWC+E1YdZa4vNyG0Im62lX+SHtGEnNB+sj73TreLEcL.jR22zjbxJDKGiPCT.9CnUlX1zoFw1PiRhMhHl79Vj5vyOjSistWNRSDwzPRpcPFlTi8J08fvG5aYWAdNAYFkyrK10KXMGSYtYg+AF+aRzgtFqDRCf6lkQ90ndQzHRfIK1cVsVltQR.ugCK6XTOzmUTJTF+.hgEEYnIPopuxHWXFPHcZznQjyvEchY.SaAtmivLWW2aWZuZHSocoFHzIErJzgGw5zgNohtay8OA6CgJ6jj34XBUBjjK345Ix9rC+iulx4IkxIhVCAoB5UjexFyONTd3bP1jqC2b6NflXoCfh2OhM22xnA1Ub8+ff0Gb7lsQUnFH2TV91me5vCOeDkbJgBcj1TnuO06iC7C0oLqZo1FbVZ7cbzXFW4g.ngbAWuSnQ32A4dH1OXQ3IDl3yFGDmwSrYHNstdDFeHUAzhenzyFjhSbQ58mIEz57yjSvo15Qsfxh1vvNTLiSKsApQazNqXEerCyaOdbUNBeBSEyORl+J6ArCtg+NjfeC78w.DGrnJOxVGWE.UcfyNjUiak5G7.WRcmfFIXoUwUQ0M8SP+908IVPb5.iHoDdkAHhfU3TfUnKd1C6l8ePm8ks2H71dhnclti168hjnMfrhn8e6YO6eVLAZ+hC+pORkYtFnkujAaN4ZxdxJR8un1Sx0u8mr5qJxpYuhEg3WCxgNrDtETSW3VP8bjmggdZZkswdX+KIWCoAIAGuoqjPREZ.lAMoRq41mIUBV52SopQi7KtePoehq9s4Vc9AkjGDeHmGa7lTZfLGqOlhEnYL5Ljw5NspZX8zOLpTZf2XJLsReqzxn7v1BAt2SO80CWnZTNFcBEWrF13Xb6rpKqH5Yi5Nshih5SjgOcOTRFtKQpuDxKNoRILV+.DXCdoFsdDde4on9B6yJaNQEZPtw3dSh07yUDs+M6cZeg1iz2n8.j+XUJiFbZaCA39kGU84OpC4O1SUDt66jiR+U0jlRmUrqlRQmj3PxT5ocP1dppXl.hMdeGhYadp2DrLLo51Ya0eZoBZ0on0ye+z8NmfKztbLwMhNioRrUK9mzXNf.2HZqwqA6tWGJPKXBQaWVvDLa2MAWPMgV5KdkZO4vq9mr92glfkbw+t5vlfa1Q0T7H5E0D3EjpZBn2ylfpyO+qJ1lv8hu9q+3dS3j93u+kABWFke8vx16rhoa6cVwywUpPJ0kUPs+hJeYU+7.DUnGSvbgUxr5294+4zTMAzGRxS2hxEtS72UTMcSTlPYMazAl.udw6yvEuNqhG1VWLV8MZUUUPeIiSGNo9sdpTJ.j63JhXyVkqItaiNs0iwYkvN+fTC61sWC6oO6BrF1IijrBWWD6EcQrSGWHZgqqh85pX6ypXmpUgnEttL1qKi85xXutL1qKi8pbYriETQZgqP0wxUsWWJj87Jwcr3SWu+eYUsl00urpqeYU+H+kU0wcAM1EytfFWYU2lOF6KJRhaXo2d48s+UOH7F7idS5RIdUOs1HjO1xgruWSaMwnG2p0GbA2HRFFQ3AzC6FRrb13OHHtOKhTES9McIHh7avQJ0oJrYuNOWASfQ6+MBWnO27xXJ6PQtK5DgsuK3t66eVwjB1b8ofMsxFzW+nioArHWpkFO06HEszqmXwE1wCzRztAv5TWWr9vbWzcR9L5ztyZeinSyx0GvSCeAesFvhXiL49XagxgV0viojSQDCYEwf0bbfpU0pGod9n25Lprue1dJ7tP7UgfWso5jZG9FmdmDfdkF9gu5e.DZHBdcBqBhIRY71soxoNLAunfuIPMdNX3GMYH.bIV8KWqt3XgIfNtS1c3WzT+ibiwRt2I36IK8O9WO+K+uugvW5EqDeb7BXGG.I0gODyVaJriSjO+ME0UTdX4RWI.7Nap9y9J2Ze6M+th8F5wc9nsUsV7gDJ0ghDiOW1NO0jH3FFMthif+uuow287u7aJ1OejvAeT4BvPqccHsLgbjEJ368+M9l2baVmSo7Xzw3f6AWvWc+GEztJw0J2Cv1XW58cIeWtIburWuIbN87MgaKMefE1wEY64P7v4EzYXKic.yEOApsMiBoNiBhU53W2V7QyHILJJTTBfBtwMtZDwB7DKirEdXPagmD0VsUy+SQVz3JXPx02xSC.FTalgkqa5gergtes77SLlbAdxeFxUOH4G+EMJS2tOfc7NsHdmq3FeJWAnruEtbfCmKt0aw6VlvEmZhHdrhA8UDsFjzxDbiC3wapDFVIhpne3FDaRzE3IVquM1203vCwh6YHMA5999zTSsnbK0swlXjGmu4OWkcKHBNH6ACK5+6xYp5qepBicyQCdj6c26DXlePem.6cuOHd3Uas3sUf3xExEnJy81QWdYbUBuLVCKjlKY+vykj5zOd.EPtsC+LX1f1NWdoiauTNKHkw9ZZhOpDSrvfNw4GzItvfNw6NnSbwAche5fNw6c9SjlQO7rgn9FPYNkWi8MKHGseS5Kh4+qFm6nN
-
@Christoph-Hart
Hey Christoph,
Thanks a lot! I'll take a look at that! Thanks for your support! :-)