If you know the place in the code, you do a git blame on the file. It will show for each line, when it got modified the last time. So you can simply click on the commit. I think it’s here:
which leads to commit:
Search the page with CMD-F for AAX and load the diff, because it is a big commit git will not load all file diffs. But you can click there on “Load diff” and see I think around L135
I don’t know, if that’s the exact place you are looking for, but maybe it helps searching…
Uff so complicated, so fixing this depends on which juce and aax-sdk were used before upgrading?
Also which kind of pre/post/revised/legacy multibus-system was used.
There should be example getAAXPluginIDForMainBusConfig() for any possible configuration
I’ve found a property in the AAX SDK that is meant to be used exactly for this case: AAX_eProperty_PlugInID_Deprecated. There is even a list version: AAX_eProperty_Deprecated_Native_Plugin_List. I suggest the cleanest way to go forward would be to replace getAAXPluginIDForMainBusConfig(…) with something like getDeprecatedAAXPluginIDs(…) which would return an array of int32s. By default, it should contain the two (or is it three) IDs that would have been used in JUCE pre-4.1 and between 4.1 and 4.3. This should sort out any compatibility issues with plugins built using those older JUCE versions.
PS: I’ve tested this with one of my plugins built with JUCE 3.5/5.0 and it works like a charme. All it takes is properties->AddProperty(AAX_eProperty_PlugInID_Deprecated, depID) in juce_AAX_Wrapper.cpp when adding the current plugin ID. This is the single deprecated ID version, obviously.
One thing to be aware of when using deprecated types is that the saved session will not itself be backwards compatible with your older plug-ins; once a user has updated a session to the new version of your plug-ins the old versions will no longer be recognized (e.g. if the session is sent to another user on a different system with the old versions installed.) The only way to maintain full compatibility is to keep the IDs exactly the same between versions.
You can query the ID values and other properties registered by an existing AAX plug-in using the DSH tool from Avid. Follow these steps in the tool:
dsh> load_dish aaxh
dsh> loadpi “/path/to/MyPlugIn.aaxplugin”
dsh> listeffects
dsh> getdescription [0, 0]
(use the desired plug-in and effect ID values from the “listeffects” printout - usually [0, 0])
In the resulting description print-out, look for the values registered for AAX_eProperty_ManufacturerID, AAX_eProperty_ProductID, and AAX_eProperty_PlugInID_Native. Pro Tools and Media Composer use the set of these three values to uniquely identify a particular variant of an effect.
Rob, if you’re still around: it seems that changes in the AAX_eProperty_ManufacturerID cannot be remedied by this? So only if the PluginID has changed, we can associated a deprecated ID with the new plugin, but not if, say, the capitalization in the ManufacturerID has changed?
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!