[SOLVED]JUCE 5 AAX plugin not compatible with JUCE 4.3.1?


I finally got all things to work with JUCE 5. What a scripting pain :slight_smile: I have updated from 4.3.1.

I have one big issue left. I’m having a pro tools 11 test project that includes some of our plugins. Pro Tools does not load and find all the JUCE 5 compiled plugins. The plugins are there and i can load them but they do not match with the juce 4.3.1 plugins anymore (with and without iLok signing):

I get following errors on windows and osx:

Track “Inst 1” Insert A (“PLUGINNAME”) has been made Inactive because the plug-in is not present in the plug-ins folder.
Track “Inst 1” Insert B (“PLUGINNAME”) has been made Inactive because the plug-in is not present in the plug-ins folder.

I did not change a single line of code and i also see no relevant changes in the AppConfig.h file (only some new features like IAA).

Our plugins only use {1, 1} {2, 2} or {2, 2} channel configurations if that’s relevant. This is really a show stopper for me and i hope that a simple tweak fixes the problem. Any help is welcome!


Ok, i see. It’s a breaking change. I have overseen that. thought this was a 4.3.0 issue only… i need to overwrite AudioProcessor::getAAXPluginIDForMainBusConfig().

This fixes the issue. Found the related thread. I was just wondering why this happened with the JUCE 5 update and not earlier.

Edit: i had the master of the 30. March (4.3.1) with the AAX unitialized something fix and this one didn’t contain this new bus id code. So i just didn’t expect the issues. The breaking changes log pointed to a much older JUCE release. Anyway, all good now…


Hi kunz,

Thank you for posting your solution, helped me a lot! :relaxed:
For completeness, if anyone else experiences the same problem, I’ll attach code example:

I have channel configuration defined statically as {1, 1}, {2, 2}.
I overrided in following way:

int32 MyPluginAudioProcessor::getAAXPluginIDForMainBusConfig (const 
AudioChannelSet& mainInputLayout, const AudioChannelSet& mainOutputLayout,
const bool idForAudioSuite) const
    int uniqueFormatId = 0;
    for (int dir = 0; dir < 2; ++dir)
        const bool isInput = (dir == 0);
        const AudioChannelSet& set = (isInput ? mainInputLayout : mainOutputLayout);
        int aaxFormatIndex = 0;

    // override and change order to set mono as 0 and stereo as 1
    // according to {1, 1}, {2, 2}
    // needed for backwards compatibility
        if (set == AudioChannelSet::mono())                    aaxFormatIndex = 0;
        else if (set == AudioChannelSet::stereo())             aaxFormatIndex = 1;
        else if (set == AudioChannelSet::disabled())           aaxFormatIndex = 2;
        else if (set == AudioChannelSet::createLCR())          aaxFormatIndex = 3;
        else if (set == AudioChannelSet::createLCRS())         aaxFormatIndex = 4;

So copypaste the existing implementation and switch the order around.



Hmm, seems like I celebrated too early, after more extensive testing, it now works on Mac, but not on Windows.
Any ideas which stone I forgot to turn?


Your solution is almost right. You will find some working code examples here: