AAX channel order in JUCE 4.2.3 with sidechain input


We’ve recently updated to 4.2.3 because of the fix for graphics on El Capitan.
However since the update (We’ve tracked it down, the last 4.1 build didn’t have this problem, the first 4.2.3 build does), the AAX wrapper does not seem to have the channel order right.

We’re adding a sidechain input in the processor’s constructor:

  busArrangement.inputBuses.add(AudioProcessorBus("Sidechain", AudioChannelSet::mono()));
  if(wrapperType == wrapperType_VST) 
    busArrangement.outputBuses.add(AudioProcessorBus("Sidechain", AudioChannelSet::mono()));

And we’ve overidden setPreferredBusArrangement() in our processor:

bool PluginProcessor::setPreferredBusArrangement(bool isInputBus, int busIndex, const AudioChannelSet& preferredSet)
  DBG(String("setPreferredBusArrangement: ") + ((isInputBus)? "input" : "output") + String(busIndex) + " = " + String(preferredSet.getSpeakerArrangementAsString()));

  if(busIndex) //sidechain input
    if(wrapperType == wrapperType_VST && preferredSet != AudioChannelSet::mono())
      return false; //VST2 sidechain always mono and enabled

    DBG(String(preferredSet.size()) + " sidechain channels");
  else //main input/output
    if(preferredSet == AudioChannelSet::mono())
      DBG(String("mono ") + ((isInputBus)? "input" : "output"));
    else if(preferredSet == AudioChannelSet::stereo())
      DBG(String("stereo ") + ((isInputBus)? "input" : "output"));
      return false;

  //when accepting a layout, always fall through to the base class
  return AudioProcessor::setPreferredBusArrangement(isInputBus, busIndex, preferredSet);

As it appears to us, the AAX wrapper now seems to interpret our channel config as “left, center (mono), right” instead of “left, right and sidechain” which causes our stereo effect plug-in to ‘mute’ the right channel.

Can you confirm that this is a bug in the 4.2.3 wrapper?


Hi rip-off,

Are you able to use the same constructor and setPreferredBusArrangement code as the NoiseGate example plug-in?

The multibus implementation is in a state of flux at the moment, so if this approach provides a quick fix then I think this is probably the best solution.


Using the code from the example, first tests indicate it seems to work fine.
Didn’t bother to look at the examples as we had it working with an older JUCE version.

Thank you so much!


Hi t0m,

although our test showed that the code runs fine on ProTools 12, we have problems getting the 32 bit AAX to receive sidechain input in ProTools 10. No audio data arrives at the S/C input channel. Did not happen before update from 4.1 to 4.2.3.

We use the code from the NoiseGate example as you suggested. Can you assist?