Channel I/O and SetChannelLabel() works in VST2 but not VST3

This has probably been addressed before but I couldn’t find in searching.

I have a plugin with a multi-channel I/O config like this:

#define PLUG_CHANNEL_IO "2-2 2-6"

with I/O pins labeled in the constructor like this:

    SetChannelLabel(ERoute::kInput, 0, "InL");
    SetChannelLabel(ERoute::kInput, 1, "InR");
    SetChannelLabel(ERoute::kOutput, 0, "MainOutL");
    SetChannelLabel(ERoute::kOutput, 1, "MainOutR");
    SetChannelLabel(ERoute::kOutput, 2, "Fx1OutL");
    SetChannelLabel(ERoute::kOutput, 3, "Fx1OutR");
    SetChannelLabel(ERoute::kOutput, 4, "Fx2OutL");
    SetChannelLabel(ERoute::kOutput, 5, "Fx2OutR");

It works perfectly in Reaper as a VST2 plugin (2in / 6out shows up in the plugin routing window with labels as shown) but the VST3 version only shows up with 2in / 2out and the default “Input Left/Input Right/Output left/Output Right” pin labels. I’ve tried manually setting Reaper’s Track Channels and VST3 bus size but it made no difference - only get 2 in 2 out. So it appears neither pin labels nor I/O routing is working as intended in the VST3 version.

Is there something else I need to do to make this work in VST3 - or is this a known issue in iPlug/VST3/Reaper?

OK, I think I solved 1/2 of my question. Instead of using both a “2-2 and 2-6” output config I tried using just “2-6” and it seems to work - at least in reaper as VST2 and VST3. I get all the pins showing in Reaper in both VST2 and VST3 versions using this config:

#define PLUG_CHANNEL_IO "2-6"

However the I/O pin labels are still not showing as intended in VST3. Default “Input Left/Output Left”, etc., is what shows up.

In VST3 you can name your busses but not your channels IIRC

1 Like

OK, thank you - will look into that.

I have found a “GetBusName()” function but no “SetBusName()” function. So, it appears this is not a current feature of iPlug2 - or maybe it’s not even possible via plugin->host for VST3?

Not a big concern - I’m just looking to make things as clear as possible for the user where I can. I do see that some DAWs apply their own labels regardless, even in VST2, but will continue to use the SetChannelLabel() function to support VST2 for DAWs that implement it.

Thank you. :+1:


Have a look at the Surround example or side chain example, you have to override getbusname()

1 Like

Side Chain example did the trick. What I didn’t notice at first is that the WDL_STRING “str” is passed as an address meaning “GetBusName()” can also function as “SetBusName()”.

Got it. Thank you!

Unexpected twist - in order to get 3 separate bus outputs for VST3 in Reaper (maybe elsewhere too, IDK) I used a 2-2.2.2 configuration. I didn’t know they could be stacked liked that (beyond one dot). Don’t know if that works in AU format but it does in VST2 and VST3.

I learned two new things today!

Yeah the SetChannelName/GetBusName confusion might change in the future - it’s a bit weird.

dots in a channel io config indicate buses, which should work in everything except VST2 and WAM formats