Multi Out Synth on AAX

I’m trying to make my synth support a main bus out, along with 16 extra stereo buses and no inputs.

On VST3 and AU it works fine, but it fails for me on AAX.

Here’s generally speaking the code I’m using:

AudioProcessor::BusesProperties Processor::getBusesLayout()
{
    BusesProperties layout;
    auto stereo = juce::AudioChannelSet::stereo();
    layout = layout.withOutput("Main", stereo);

    for (int index = 0; index < 16; ++index)
    {
        layout = layout.withOutput(getOutputName(index), stereo, false);
    }

    return layout;
}

And:

bool Processor::isBusesLayoutSupported(
        const AudioProcessor::BusesLayout& layout) const
{
    for (const auto& bus: layout.outputBuses)
    {
        if (bus != juce::AudioChannelSet::stereo())
            return false;
    }

    return layout.inputBuses.isEmpty() && layout.outputBuses.size() > 0
           && layout.outputBuses.size() <= 17;
}

But it seems to fail.
Things I’ve tried:

  1. Adding two inputs.
  2. Making the buses enabled by default.

Any ideas?

1 Like

Bump.

Any ideas?

That’s generally speaking what I’m doing too.

bool PolySynthAudioProcessor::isBusesLayoutSupported (const BusesLayout& layout) const
{
    for (const auto& bus : layout.outputBuses) {
        if (bus != AudioChannelSet::stereo())
            return false;
    }
    
    const int numBusses = mPluginCore.getProcessingInfo().getNumOutputs();
    
    return layout.inputBuses.isEmpty() &&
    (1 == layout.outputBuses.size() || numBusses == layout.outputBuses.size());
}

So the options for the user are 1 main output or 5 individual outs in this case.

I haven’t tested this in AAX though but Logic is quite fussy and this code worked in Logic.

When you say it fails in AAX what do you mean? The plugin doesn’t validate or the outputs just don’t appear?

Thank you for your answer!

Yes, I actually have no problems with the code in Logic or Cubase.

But in AAX, after asking for stereo outputs, PT calls me back to validate mono outputs, and that fails.

I’ve just tested a multi-out plugin in ProTools and it works OK so far. I had to create a separate audio track and then set the new track’s input to one of the plugin’s multi outputs.

Click the output menu on the new audio track:
Screenshot 2022-08-07 at 15.54.30

Then select a plugin output.

In the plugin constructor I set up the busses properties like this:

: AudioProcessor {
    BusesProperties()
        .withOutput("Main", AudioChannelSet::stereo(), true)
        .withOutput("Out 1", AudioChannelSet::stereo(), true)
        .withOutput("Out 2", AudioChannelSet::stereo(), true)
        .withOutput("Out 3", AudioChannelSet::stereo(), true)
        .withOutput("Out 4", AudioChannelSet::stereo(), true)
}

I’m currently not doing anything with Processor::getBusesLayout().

And returning false for canAddBus() and canRemoveBus(). The default implementation does that anyway.

bool PolySynthAudioProcessor::canAddBus (bool isInput) const
{
    return false;
}

bool PolySynthAudioProcessor::canRemoveBus (bool isInput) const
{
    return false;
}

Hope that helps.

1 Like

Thank you so much for your help!

Looking at your code helped a lot: first of all seems like enabling the buses by default helps, but it only worked if I reduced the number of buses. Looks like the maximum Pro Tools allows is 15 stereo tracks, and once I’m increasing it to 16, Pro Tools will refuse to scan the plugin.

1 Like