Modulator level broadcaster
-
@d-healey I would have to poll it on the C++ side too and as long as you're polling on the UI thread there's not a huge performance hit.
-
@Christoph-Hart That makes sense.
So the situation I have is I want to take the value of a modulator (LFO or CC) and scale it using a table on the UI and pass the result to one of the macro parameters of a scriptnode effect.
The catch is I want one table per scriptnode parameter so I can't just use the modulator's single table.
Do you have a suggestion for the best way to achieve this?
Currently I'm polling the modulator, scaling the value with the table, and passing the value to the knob, but since this is in the UI thread it doesn't work when the plugin interface is not visible.
-
Is there a broadcaster that can listen to a modulator's intensity (not talking about LFOs) but things like CC modulators?
I tried
attachToModuleParameter
but best I can do is get thedefaultValue
knob's value. -
@d-healey Intensity is not a parameter but a property of the modulator base class, but I think I can add a special case to it so you can use
attachToModuleParameter()
(like I'm already doing with "Bypassed"). -
@Christoph-Hart Yeah that would be great, thanks!
-
@Christoph-Hart said in Modulator level broadcaster:
@d-healey Intensity is not a parameter but a property of the modulator base class, but I think I can add a special case to it so you can use
attachToModuleParameter()
(like I'm already doing with "Bypassed").Was this ever added?
-
@d-healey Now it is.
I've also added the possibility to connect global cables directly to Global modulators as source and any module parameter as target, so you don't have to go through scriptnode anymore for this.
const var gm = Engine.getGlobalRoutingManager(); const var c = gm.getCable("Global LFO 1"); c.connectToGlobalModulator("LFO", true); c.connectToModuleParameter("Simple Gain1", "Balance", {"MinValue": -25.0, "MaxValue": 25.0});
this opens up many new options of block-rate modulation of any parameter in HISE!
HiseSnippet 1248.3oc2X0saaaCEVx1rKwqanYqXWLfAH3qb2RMraSS2OXndwINvXwIFQtocXWTvHQaSDIRMJprlUz62c6UXWsmi8HrWgsmf8FrcnnrjbhqqqqaV5zEBlmen93ge7bNz8DbGRXHWXXtZ+yBHFlWGYeFSNp0HLkYzYaPNpK2sOITZr0YA3vPhqgoYwcUpMWsjQ7ye+fsvdXlCISjgwQbpCYOpOUlIsWyuk540F6R5S8yY8FM63vYs3d7H.JEQ0MBvNmfGR1GqLq.xv7Z63RkbgsDKIgFlk1h6dl8H9Oxz1eDMjdrGQMnggMLQZws4dtJDqjZzZD0ys23kbnggIpWV.nnN.bSTWpKMUdVf3FwJrx7He7vrvjvq3DvqQd3UOG7lBjLyAoRZHsFx1QPCjYZT34cQcXRhX.FB64gh1ViB+lIpEGrfIq4iOgzV.CR8n5l0qutE75VeU4xPnOTZcJVXMz25qs1gMjxH0FRj65wOF6cHORRYC6hYvFhnJ3QlCNf8C8U11BCqupUztXsW6CrZTIdxqAVyHNx9bsNfNE4ggXU0JfUUV2RJhHpIMyvXSH8vBX2G.b0J1T+.Ohkh00.7nRBcC94ypzkxNB6EQp7kV29N2qFrrpzE+zwhTRdNL6ChXNRJmYwY6ykjCXUuU4mUd0xOur04UMXvT0oBlBtmmJDLE0JBsXVNVkE4eLQrND2.nkZHrKOI0A8hoN4Y1N581bFxYcXT4AAD1KhuajPHfe8vNaikXEeKQFXW.QHoJHXtM4T3vql8sJZaR3IRd.b78BTyafR2NyeRQsQkn.hASPOUTPVHUdV9zGKsiOyKDWC0iJcFMcLVXJXDhTuIvXRRm2CsyfA.0OCfkPse7anLLEx88WIMqe7IrcG+4eeT9ibyH0ugw1DO7DApGQckixD7cMmr3f0m9Q2+26vNEHa83dXw4CyEm60YiYuNKM2bA0Rx50guVZ91Llc0n4k69An3P9aS.NlR71CfuApG9p.gHsxqTPeJTYX+HeanCIGB.UnTompZgYAUdc835pwJ.YSXtwC9G3IQYC0XyDkMFqbJgjxIsa.IfTAiqmLzp8iaLsFML+YTV0t.AI.KH848.FZ0PrJGxgPHYcqi83NmXS+IxEKQFngvVJKp5jrzVjJonkTpiKk.+xqVbRR7OFctFrTyFPoI59E+jD0Vo5sRMXVY3+i4s49f4t49ymiuz7sQ8RZluzUtl4m27Me3E1ZBuD6YZhFBVSCSDB5MOFa5e8RQyVz.Uwbk91BxODQXNi0+q69m+0CTzhNYrpl+RyGgOkLfK7SX1oyzdjgPDHuj9D+.NbsTm7LPaeNWNBNjNIY6lM2iyC1gotMha9Io2Hbnp29PhbhoAlV3BG3P3dFsTIfxqryPFWPz2WHu7VQgRt+3EP78Sskjf3SwleOZyMpAOC9L06unE75tGrbF+pzCZi4eOe1TS0U4R2xULzqfsyqQYJw6+PT9NZTtB5PLyk6GitqEO3U5LzCCI8wwe7LVmdFiEqYZp+VjkEgXobwoh+u9hSWJcEbY7M7wNB9SbzMSoRFrRrDXcyh+61VE0UM1pgQbCVpZ.0qU2vGpX9DGGUH91PA3o6ycV.et6B3yFKfO2aA7YyEvm6u.974yzGUyJeSDTyQejCDzaGcN.yzRclEM9WfpZONI
-
@Christoph-Hart Excellent!
-
@Christoph-Hart said in Modulator level broadcaster:
@d-healey Now it is.
I've also added the possibility to connect global cables directly to Global modulators as source and any module parameter as target, so you don't have to go through scriptnode anymore for this.
const var gm = Engine.getGlobalRoutingManager(); const var c = gm.getCable("Global LFO 1"); c.connectToGlobalModulator("LFO", true); c.connectToModuleParameter("Simple Gain1", "Balance", {"MinValue": -25.0, "MaxValue": 25.0});
this opens up many new options of block-rate modulation of any parameter in HISE!
HiseSnippet 1248.3oc2X0saaaCEVx1rKwqanYqXWLfAH3qb2RMraSS2OXndwINvXwIFQtocXWTvHQaSDIRMJprlUz62c6UXWsmi8HrWgsmf8FrcnnrjbhqqqqaV5zEBlmen93ge7bNz8DbGRXHWXXtZ+yBHFlWGYeFSNp0HLkYzYaPNpK2sOITZr0YA3vPhqgoYwcUpMWsjQ7ye+fsvdXlCISjgwQbpCYOpOUlIsWyuk540F6R5S8yY8FM63vYs3d7H.JEQ0MBvNmfGR1GqLq.xv7Z63RkbgsDKIgFlk1h6dl8H9Oxz1eDMjdrGQMnggMLQZws4dtJDqjZzZD0ys23kbnggIpWV.nnN.bSTWpKMUdVf3FwJrx7He7vrvjvq3DvqQd3UOG7lBjLyAoRZHsFx1QPCjYZT34cQcXRhX.FB64gh1ViB+lIpEGrfIq4iOgzV.CR8n5l0qutE75VeU4xPnOTZcJVXMz25qs1gMjxH0FRj65wOF6cHORRYC6hYvFhnJ3QlCNf8C8U11BCqupUztXsW6CrZTIdxqAVyHNx9bsNfNE4ggXU0JfUUV2RJhHpIMyvXSH8vBX2G.b0J1T+.Ohkh00.7nRBcC94ypzkxNB6EQp7kV29N2qFrrpzE+zwhTRdNL6ChXNRJmYwY6ykjCXUuU4mUd0xOur04UMXvT0oBlBtmmJDLE0JBsXVNVkE4eLQrND2.nkZHrKOI0A8hoN4Y1N581bFxYcXT4AAD1KhuajPHfe8vNaikXEeKQFXW.QHoJHXtM4T3vql8sJZaR3IRd.b78BTyafR2NyeRQsQkn.hASPOUTPVHUdV9zGKsiOyKDWC0iJcFMcLVXJXDhTuIvXRRm2CsyfA.0OCfkPse7anLLEx88WIMqe7IrcG+4eeT9ibyH0ugw1DO7DApGQckixD7cMmr3f0m9Q2+26vNEHa83dXw4CyEm60YiYuNKM2bA0Rx50guVZ91Llc0n4k69An3P9aS.NlR71CfuApG9p.gHsxqTPeJTYX+HeanCIGB.UnTompZgYAUdc835pwJ.YSXtwC9G3IQYC0XyDkMFqbJgjxIsa.IfTAiqmLzp8iaLsFML+YTV0t.AI.KH848.FZ0PrJGxgPHYcqi83NmXS+IxEKQFngvVJKp5jrzVjJonkTpiKk.+xqVbRR7OFctFrTyFPoI59E+jD0Vo5sRMXVY3+i4s49f4t49ymiuz7sQ8RZluzUtl4m27Me3E1ZBuD6YZhFBVSCSDB5MOFa5e8RQyVz.Uwbk91BxODQXNi0+q69m+0CTzhNYrpl+RyGgOkLfK7SX1oyzdjgPDHuj9D+.NbsTm7LPaeNWNBNjNIY6lM2iyC1gotMha9Io2Hbnp29PhbhoAlV3BG3P3dFsTIfxqryPFWPz2WHu7VQgRt+3EP78Sskjf3SwleOZyMpAOC9L06unE75tGrbF+pzCZi4eOe1TS0U4R2xULzqfsyqQYJw6+PT9NZTtB5PLyk6GitqEO3U5LzCCI8wwe7LVmdFiEqYZp+VjkEgXobwoh+u9hSWJcEbY7M7wNB9SbzMSoRFrRrDXcyh+61VE0UM1pgQbCVpZ.0qU2vGpX9DGGUH91PA3o6ycV.et6B3yFKfO2aA7YyEvm6u.974yzGUyJeSDTyQejCDzaGcN.yzRclEM9WfpZONI
Whats "LFO" here- is it (for example) an LFO used in the Gain Modulation section of the Simple Gain fx?
-
-
@Lindon can I do this:
const var gm = Engine.getGlobalRoutingManager(); const var c = gm.getCable("Global LFO 1"); c.connectToGlobalModulator("LFO", true); c.connectToModuleParameter("Simple Gain1", "Balance", {"MinValue": -25.0, "MaxValue": 25.0}); c.connectToModuleParameter("Simple Gain2", "Balance", {"MinValue": -25.0, "MaxValue": 25.0});
-
@Lindon Try it :)
-
This post is deleted! -
I want to use the
attachToModuleParameter
to send the output intensity of the LFO to a knob. It looks to me though that I picked the wrong word when I said Intensity as this is of course the intensity slider, what I need is the output level.Is there a way to get this with a broadcaster?
-
@d-healey is it a global mod?
-
@Christoph-Hart This is huge! Well done!
-
@Christoph-Hart Yes
-
@d-healey then you can attach a global cable to the modulator and a broadcaster to the global cable.
-
@Christoph-Hart Which attach function do I use to attach the broadcaster to the cable?
Also, any reason I shouldn't do it this way?
const var gm = Engine.getGlobalRoutingManager(); const var c = gm.getCable("Global LFO 1"); c.connectToGlobalModulator("LFO Modulator1", true); const var Knob1 = Content.getComponent("Knob1"); c.registerCallback(function(value) {Knob1.setValue(value);}, false);
-
You just pass in the broadcaster into the
registerCallback()
function and then it will distribute it to its listeners:const var rm = Engine.getGlobalRoutingManager(); const var lfo_cable = rm.getCable("LFO"); lfo_cable.connectToGlobalModulator("LFO Modulator1", true); const var bc = Engine.createBroadcaster({ "id": "Mod Output", "args": ["value"] }); // Use the broadcaster instead of a function lfo_cable.registerCallback(bc, AsyncNotification); bc.addListener("", "logger", function(value) { //Console.print(value); });
Whether you want a broadcaster or directly use a function is up to your project layout, but using a broadcaster will get you more flexibility.