Hi and welcome,
Sure.
I’m posting a simple modulation example I used with the nanoKontrol, you could adapt to your granulation synth.
// start Synth silently
(
x = { arg minCarrFr = 300, maxCarrFr = 500, freqModFr, widthModFr, ampModFr, panModFr, amp = 0;
var sig = Pan2.ar(
Pulse.ar(
SinOsc.ar(freqModFr).range(minCarrFr, maxCarrFr),
SinOsc.ar(widthModFr).range(0.05, 0.5),
SinOsc.ar(ampModFr).range(0, 0.1)
),
SinOsc.ar(panModFr)
) * amp;
LeakDC.ar(sig)
}.play
)
// connect MIDI
// suppose nanoKontrol sliders mapped to cc 0-6
// amplitude controlled by second slider from right
(
MIDIIn.connectAll;
// add global Specs
Spec.add(\minCarrFr, [50, 500, \lin]);
Spec.add(\maxCarrFr, [50, 500, \lin]);
Spec.add(\freqModFr, [0, 200, \lin]);
Spec.add(\widthModFr, [0, 50, \lin]);
Spec.add(\ampModFr, [0, 200, \lin]);
Spec.add(\panModFr, [30, 100, \lin]);
// global Spec for amp is defined
[\minCarrFr, 0, \maxCarrFr, 1, \freqModFr, 2, \widthModFr, 3, \ampModFr, 4, \panModFr, 5, \amp, 6].pairsDo { |sym, num|
MIDIFunc.cc({ |val|
x.set(sym, sym.asSpec.map(val / 127));
}, ccNum: num);
}
)
x.release
Greetings
Daniel