I’m trying to figure out how to use the MKtl so that it fits my needs.
I’m not using the faders as much as the encoders and I would like to make more pages available for the encoders.
I thought that I figured out a simple solution. Just change the midichannel for the encoders, but I cant get it to work. Anyone got an idea on how to change that in the desc-file?
Should I remove it from the shared elements and specify channel e.g 15 on knobs and then specify channel 0 on faders and buttons? Then I can just reprogram my device.
i dont know if thats helpful. I have a Faderfox EC4 and have set it up like this using the Modality Toolkit, to be used on NodeProxies, which i prepare by using .prime on a SynthDef and the awesome NodeProxyGui2. Maybe a starting point to setup your UC4.
(
~makeNodeProxy = { |synthDefName, initArgs=#[], excludeParams=#[], ignoreParams=#[], numChannels = 2|
Environment.make { |self|
self.know = true;
~midiController = MKtl(\faderfox, "faderfox_ec4"); // <-- put your controller here
~synthDef = SynthDescLib.global[synthDefName].def ?? {
Error("SynthDef '%' not found".format(synthDefName)).throw
};
~nodeProxy = NodeProxy.audio(s, numChannels);
~nodeProxy.prime(~synthDef).set(*initArgs);
~nodeProxyGui = { |self|
NodeProxyGui2(self.nodeProxy, show: false)
.excludeParams_(excludeParams)
.ignoreParams_(ignoreParams)
};
~makeGui = { |self|
var window;
window = Window(self.synthDef.name, Rect(10, 720, 440, 320)).front;
window.layout = VLayout(self.nodeProxyGui);
};
~mapMidi = { |self, params=#[]|
self.unmapMidi;
params.do{ |key, i|
var spec = (self.nodeProxy.specs[key] ?? { Spec.specs[key] }).asSpec;
// should be adjusted if necessary to your controller
self.midiController.elAt(\GR01, \kn, i).action_{ |el|
self.nodeProxy.set(key, spec.map(el.value));
};
};
};
~unmapMidi = { |self|
self.midiController.resetActions;
};
};
};
)
(
SynthDef(\test, {
var tFreq, trig, env, freq, fmod, sig;
tFreq = \tFreq.kr(8, spec: ControlSpec(1, 16));
trig = Impulse.ar(tFreq);
env = Decay2.ar(trig, \atk.kr(0.01), \dec.kr(0.1));
freq = \freq.kr(440, spec: ControlSpec(20, 1000));
fmod = SinOsc.ar(\fmFreq.kr(5, spec: ControlSpec(1, 1000)));
sig = SinOsc.ar(freq + (freq * fmod * \fmIndex.kr(2, spec: ControlSpec(0, 5))));
sig = sig * env;
sig = Pan2.ar(sig, \pan.kr(0, spec: ControlSpec(-1, 1)));
Out.ar(\out.kr(0), sig);
}).add;
)
x = ~makeNodeProxy.(\test);
x.makeGui;
x.mapMidi([\tFreq, \freq, \fmFreq, \fmIndex]);
x.unmapMidi;
Thanks! Will try it, though it looks like a different workflow and I would love to just fix the Modality toolkit so that it works with all knobs/encoders.