Hello!
Let`s say I have a SynthDef named exampleSynth
, which has the arguments freq
and freqAdd
.
SynthDef.new(
\exampleSynth,
{
arg freq=440, freqAdd=0;
var sig, freqModded;
freqModded = freq + In.kr( freqAdd );
sig = SinOsc.ar( freqModded );
sig = sig * Env.perc.kr;
Out.ar( [ 0, 1 ], sig );
}
).add;
_
Now this SynthDef is played by a Pbind and freqAdd
is controlled by a Control Bus named freqAddBus
~freqAddBus = Bus.control;
Pbind(
\instrument, \example_synth,
\degree, Pseq([1,3,1,5], inf),
\freqAdd, ~freqAddBus.index
).play
I want to have multiple signals affecting the value of the freqAddBus
.
Let`s say I have a signal on bus ~b1
, another one on bus ~b2
, a value ~gui1
that is set by a GUI-slider and a value ~midi1
, that is set by a MIDIFunc.
After every control rate cycle the value of the ~freqAddBus
should be ( ( ~b1 + ~b2 ) * ~gui1 ) - ~midi1
My question is:
How do I set the value of the ~freqAddBus
for each control rate cycle?
My idea was to have a list of all the modulations that should happen to the bus. For this example it would look like this:
- Add
~b1
- Add
~b2
- Mul
~gui1
- Subtract
~midi1
And then have a Routine
that runs a function every control cycle, which first gets the value of the ~freqAddBus
, then performs all the calculations in the list on this value and in the end, sets the value of the bus to the result of the calculation.
Is this the right way to do it?
Is a Routine the right class to perform calculations every control cycle?
All the best and thank you,
globalatmo