Cabbage Logo
Back to Cabbage Site

Changes to multichannel setup

Based on feedback I was getting about issues with multichannel instruments in various hosts, I rewrote a chunk of code that deals with this. I’ve tested in Studio One, Cubase, Reaper and Live, and so far I see no issues with VSTs. However, I have yet to test AUs, I expect I will hit a few issues there. So please don’t anyone update unless you absolutely need these changes!

Users do not, and will not need to change anything in their code. This is merely a warning shot to those testing the latest dev tip.

@Gerbo I’m pretty sure the side-channel stuff is now broken :frowning: But don’t worry, it’s next on my list. Then it’s back to the mono/stereo issues we had in Logic. The upshot is that the code base is much cleaner now.

@Andy.Fillebrown This might also break some of your stuff, so stay clear of this tip until I can work on the AU side of things :+1:

[edit] audio FX might be broken in Cubase, but synths are working fine…

Thanks for the heads up but I switched from Logic and AU to Reaper and VST3 late last year. I found Reaper’s multichannel support is a lot easier to work with than Logic’s.

Thanks for the recommendation :+1: When I’m ready, I’ll do all the tests you need.

Well, you have some time to relax because I’m not ready at all yet. I just spend the last few hours slowly getting things back to a good state. Right now I’m back to sidechaining. :see_no_evil:

I’ve just pushed more changes to git. I think this is in a much better state now that in previous versions. Just a few things to note:


All plugins channels are grouped as stereo pairs. If you choose 4 inputs, and 4 outputs, they will be listed by most hosts as 2 stereo ins, and two stereo outs. For now, you should always have an even number of inputs and an even number of outputs.


The sidechain() identifier is now deprecated. Side chains are now automatically picked up by hosts depending on your nchnls/nchnls_i setup. For example, the following will create a stereo in/out plugin with two auxilary channels as sidechain inputs:

nchnls = 2; main outputs
nchnls_i = 4 ;main inputs(chan 1, chan 2) and sidechain(chan 3, chan4)

Some host can, and will override, nchnls/nchnls_i. For example, if you drop an instrument with nchnls=2 defined onto a mono track in Logic, nchnls will be overwritten and set to 1. That’s what it’s a good idea to use code like this in your instruments:

if nchnls == 1 then
    outs	(aLeft+aRight)/2
else
	outs aLeft, aRight
endif

Finally, each channel bus has an L appended to its name. I’ve no idea why. it’s annoying, but not life threatening. Let me know how it goes, it’s largely untested.

Of course if you don’t need any multichannel instruments this is all rather inconsequential.

I have just started some sidechain testing :sweat_smile:. I’m seeing how it behaves…

1 Like