Transition from 4.1.0 to 4.3.1 and AAX I/O issue

In case anyone else finds this useful:

The following is what I had to do to make Pro Tools 10 projects using an old RTAS version of my JUCE-based plugin load in Pro Tools 2018 using a recent AAX 64-bit version of the plugin. This plugin is has the old bus / audio channel combinations specification in the Projucer, namely: {1,1}, {1, 2}, {2, 2}.

int32 MyPluginAudioProcessor::getAAXPluginIDForMainBusConfig(const AudioChannelSet& mainInputLayout, const AudioChannelSet& mainOutputLayout, bool idForAudioSuite) const
{
    // Back when we released the RTAS version, JUCE generated plugin IDs (starting from 'jcaa') incrementing in the order 
    // of the specified supported channel configurations.
    // But, for newer JUCE versions, plugin IDs are generated in another way (see the default implementation of this method).
    // So, in order to make Pro Tools still see the newer releases as the same plugin as before, we need to keep using the same IDs.
    // In the RTAS version, we had the following (and that's what we'll be forcing here in the code):
    // - for mono-mono:         'jcaa'
    // - for mono-stereo:       'jcab'
    // - for stereo-stereo:     'jcac'
    int uniqueFormatId = 0;

    if (mainInputLayout == AudioChannelSet::mono())
    {
        if (mainOutputLayout == AudioChannelSet::mono())
            uniqueFormatId = 0;
        else if (mainOutputLayout == AudioChannelSet::stereo())
            uniqueFormatId = 1;
        else
            jassertfalse;
    }
    else if (mainInputLayout == AudioChannelSet::stereo())
    {
        if (mainOutputLayout == AudioChannelSet::stereo())
            uniqueFormatId = 2;
        else
            jassertfalse;
    }
    else
    {
        jassertfalse;
    }

    return (idForAudioSuite ? 0x6a796161 /* 'jyaa' */ : 0x6a636161 /* 'jcaa' */) + uniqueFormatId;
}

Note: The old RTAS version didn’t show up under the AudioSuite menu, but the new AAX version does (which is a good thing in my case). You can disable this if you want to with the pre-processor flag JucePlugin_AAXDisableAudioSuite (more info: Was AudioSuite support quietly added to Juce?)

With thanks to @ttg for pointing me in this direction!

1 Like