mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-22 01:34:21 +00:00
Added a fix to generate the AAX plug-in ID from the channel configuration (and not an arbitrary order in which JUCE probes configurations)
Also added the method AudioProcessor::getAAXPluginIDForMainBusConfig for developers to override the generation of AAX plug-in IDs so that their plug-ins remain backward compatible
This commit is contained in:
parent
efac121466
commit
7d28d7dec2
3 changed files with 74 additions and 7 deletions
|
|
@ -1734,8 +1734,10 @@ namespace AAXClasses
|
|||
return meterIdx;
|
||||
}
|
||||
|
||||
static void createDescriptor (AAX_IComponentDescriptor& desc, int configIndex,
|
||||
const AudioProcessor::BusesLayout& fullLayout, AudioProcessor& processor,
|
||||
static void createDescriptor (AAX_IComponentDescriptor& desc,
|
||||
const AudioProcessor::BusesLayout& fullLayout,
|
||||
AudioProcessor& processor,
|
||||
Array<int32>& pluginIds,
|
||||
const int numMeters)
|
||||
{
|
||||
AAX_EStemFormat aaxInputFormat = getFormatForAudioChannelSet (fullLayout.getMainInputChannelSet(), false);
|
||||
|
|
@ -1797,10 +1799,22 @@ namespace AAXClasses
|
|||
|
||||
// This value needs to match the RTAS wrapper's Type ID, so that
|
||||
// the host knows that the RTAS/AAX plugins are equivalent.
|
||||
properties->AddProperty (AAX_eProperty_PlugInID_Native, 'jcaa' + configIndex);
|
||||
const int32 pluginID = processor.getAAXPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
|
||||
fullLayout.getMainOutputChannelSet(),
|
||||
false);
|
||||
|
||||
// The plugin id generated from your AudioProcessor's getAAXPluginIDForMainBusConfig callback
|
||||
// it not unique. Please fix your implementation!
|
||||
jassert (! pluginIds.contains (pluginID));
|
||||
pluginIds.add (pluginID);
|
||||
|
||||
properties->AddProperty (AAX_eProperty_PlugInID_Native, pluginID);
|
||||
|
||||
#if ! JucePlugin_AAXDisableAudioSuite
|
||||
properties->AddProperty (AAX_eProperty_PlugInID_AudioSuite, 'jyaa' + configIndex);
|
||||
properties->AddProperty (AAX_eProperty_PlugInID_AudioSuite,
|
||||
processor.getAAXPluginIDForMainBusConfig (fullLayout.getMainInputChannelSet(),
|
||||
fullLayout.getMainOutputChannelSet(),
|
||||
true));
|
||||
#endif
|
||||
|
||||
#if JucePlugin_AAXDisableMultiMono
|
||||
|
|
@ -1879,7 +1893,7 @@ namespace AAXClasses
|
|||
}
|
||||
|
||||
#else
|
||||
int configIndex = 0;
|
||||
Array<int32> pluginIds;
|
||||
|
||||
const int numIns = numInputBuses > 0 ? AAX_eStemFormatNum : 0;
|
||||
const int numOuts = numOutputBuses > 0 ? AAX_eStemFormatNum : 0;
|
||||
|
|
@ -1900,14 +1914,14 @@ namespace AAXClasses
|
|||
|
||||
if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor())
|
||||
{
|
||||
createDescriptor (*desc, configIndex++, fullLayout, *plugin, numMeters);
|
||||
createDescriptor (*desc, fullLayout, *plugin, pluginIds, numMeters);
|
||||
check (descriptor.AddComponent (desc));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// You don't have any supported layouts
|
||||
jassert (configIndex > 0);
|
||||
jassert (pluginIds.size() > 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1302,6 +1302,45 @@ AudioProcessor::BusesProperties AudioProcessor::BusesProperties::withOutput (con
|
|||
return retval;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
int32 AudioProcessor::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;
|
||||
|
||||
if (set == AudioChannelSet::disabled()) aaxFormatIndex = 0;
|
||||
else if (set == AudioChannelSet::mono()) aaxFormatIndex = 1;
|
||||
else if (set == AudioChannelSet::stereo()) aaxFormatIndex = 2;
|
||||
else if (set == AudioChannelSet::createLCR()) aaxFormatIndex = 3;
|
||||
else if (set == AudioChannelSet::createLCRS()) aaxFormatIndex = 4;
|
||||
else if (set == AudioChannelSet::quadraphonic()) aaxFormatIndex = 5;
|
||||
else if (set == AudioChannelSet::create5point0()) aaxFormatIndex = 6;
|
||||
else if (set == AudioChannelSet::create5point1()) aaxFormatIndex = 7;
|
||||
else if (set == AudioChannelSet::create6point0()) aaxFormatIndex = 8;
|
||||
else if (set == AudioChannelSet::create6point1()) aaxFormatIndex = 9;
|
||||
else if (set == AudioChannelSet::create7point0()) aaxFormatIndex = 10;
|
||||
else if (set == AudioChannelSet::create7point1()) aaxFormatIndex = 11;
|
||||
else if (set == AudioChannelSet::create7point0SDDS()) aaxFormatIndex = 12;
|
||||
else if (set == AudioChannelSet::create7point1SDDS()) aaxFormatIndex = 13;
|
||||
else
|
||||
{
|
||||
// AAX does not support this format and the wrapper should not have
|
||||
// called this method with this layout
|
||||
jassertfalse;
|
||||
}
|
||||
|
||||
uniqueFormatId = (uniqueFormatId * 16) + aaxFormatIndex;
|
||||
}
|
||||
|
||||
return (idForAudioSuite ? 0x6a796161 /* 'jyaa' */ : 0x6a636161 /* 'jcaa' */) + uniqueFormatId;
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {}
|
||||
|
|
|
|||
|
|
@ -1263,6 +1263,20 @@ public:
|
|||
*/
|
||||
void setRateAndBufferSizeDetails (double sampleRate, int blockSize) noexcept;
|
||||
|
||||
//==============================================================================
|
||||
/** AAX plug-ins need to report a unique "plug-in id" for every audio layout
|
||||
configuration that your AudioProcessor supports on the main bus. Override this
|
||||
function if you want your AudioProcessor to use a custom "plug-in id" (for example
|
||||
to stay backward compatible with older versions of JUCE).
|
||||
|
||||
The default implementation will compute a unique integer from the input and output
|
||||
layout and add this value to the 4 character code 'jcaa' (for native AAX) or 'jyaa'
|
||||
(for AudioSuite plug-ins).
|
||||
*/
|
||||
virtual int32 getAAXPluginIDForMainBusConfig (const AudioChannelSet& mainInputLayout,
|
||||
const AudioChannelSet& mainOutputLayout,
|
||||
bool idForAudioSuite) const;
|
||||
|
||||
//==============================================================================
|
||||
/** Not for public use - this is called before deleting an editor component. */
|
||||
void editorBeingDeleted (AudioProcessorEditor*) noexcept;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue