asb2m10 / dexed

DX7 FM multi plaform/multi format plugin
GNU General Public License v3.0
2.8k stars 241 forks source link

MPE - how to have several pitch bends on several channels? #368

Closed gexahedron closed 1 month ago

gexahedron commented 1 year ago

Hi, I'm trying to used dexed within Supercollider, as a VSTPluginController, in a MPE mode, for microtonal purposes. I can't figure out, how pitch bend should work. My expectation was, that if you send 2 different pitch bend values to 2 different channels, they will be independent from each other. This kind of approach works on Surge XT, and with chipsynths from Plogue. However, this doesn't work with Dexed - pitch bend seems to be global. Example code, how i use Dexed in Supercollider:

// 1. define synthdef
(
SynthDef(\vst_plugin, {|out, gate = 1|
    var sig = VSTPlugin.ar(numOut: 2);
    Out.ar(out, sig);
}).add;
)

// 2. init synth
a = Synth(\vst_plugin);

// 3. init vst plugin controller
c.open("Dexed.vst3");

// 4. play notes
(
p = Pbind(
    \type, \vst_midi,
    \vst, c,
    \midinote, Pseq([60]),
    \chan, 3,
    \dur, Pseq([1]),
    \amp, 1.0
);

q = Pbind(
    \type, \vst_midi,
    \vst, c,
    \midicmd, \bend,
    \val, Pseq([8192]), // def 8192, min 0, max 16383
    \chan, 3,
    \dur, Pseq([1]),
);

t = Pbind(
    \type, \vst_midi,
    \vst, c,
    \midinote, Pseq([64]),
    \chan, 4,
    \dur, Pseq([1]),
    \amp, 1.0
);

v = Pbind(
    \type, \vst_midi,
    \vst, c,
    \midicmd, \bend,
    \val, Pseq([4192]), // def 8192, min 0, max 16383
    \chan, 4,
    \dur, Pseq([1]),
);

r = Ppar([p, q, t, v]).play;
)

So, [p, q] are commands for one note on channel 3, [t, v] are commands for the other note on channel 4.

Should I do it differently somehow?

gexahedron commented 1 year ago

Okay, as an alternative, what works for me right now - monophonic mode, without MPE, and playing only a single note in a single VST plugin instance