Hi All,
I'm tryint to get my plugin to support 7.1 SDDS format in Pro tools. At the moment the plugin descriptions in the AAX wrapper allow it to load into a normal 7.1 track, but I can' load it into a 7.1(SDDS) track.
If I'm not mistaken, by default the AAX wrapper creates a property map for 8-channel support with AAX_eProperty_InputStemFormat assigned to AAX_eStemFormat_7_1_DTS:
juce_AAX_Wrapper.cpp
static AAX_EStemFormat getFormatForChans (const int numChans) noexcept
{
switch (numChans)
{
case 0: return AAX_eStemFormat_None;
case 1: return AAX_eStemFormat_Mono;
case 2: return AAX_eStemFormat_Stereo;
case 3: return AAX_eStemFormat_LCR;
case 4: return AAX_eStemFormat_Quad;
case 5: return AAX_eStemFormat_5_0;
case 6: return AAX_eStemFormat_5_1;
case 7: return AAX_eStemFormat_7_0_DTS;
case 8: return AAX_eStemFormat_7_1_DTS;
default: jassertfalse; break;
}
return AAX_eStemFormat_None;
}
//==============================================================================
static void createDescriptor (AAX_IComponentDescriptor& desc, int channelConfigIndex,
int numInputs, int numOutputs)
{
check (desc.AddAudioIn (JUCEAlgorithmIDs::inputChannels));
check (desc.AddAudioOut (JUCEAlgorithmIDs::outputChannels));
check (desc.AddAudioBufferLength (JUCEAlgorithmIDs::bufferSize));
check (desc.AddDataInPort (JUCEAlgorithmIDs::bypass, sizeof (int32_t)));
#if JucePlugin_WantsMidiInput
check (desc.AddMIDINode (JUCEAlgorithmIDs::midiNodeIn, AAX_eMIDINodeType_LocalInput,
JucePlugin_Name, 0xffff));
#endif
#if JucePlugin_ProducesMidiOutput
check (desc.AddMIDINode (JUCEAlgorithmIDs::midiNodeOut, AAX_eMIDINodeType_LocalOutput,
JucePlugin_Name " Out", 0xffff));
#endif
check (desc.AddPrivateData (JUCEAlgorithmIDs::pluginInstance, sizeof (PluginInstanceInfo)));
// Create a property map
AAX_IPropertyMap* const properties = desc.NewPropertyMap();
jassert (properties != nullptr);
properties->AddProperty (AAX_eProperty_ManufacturerID, JucePlugin_AAXManufacturerCode);
properties->AddProperty (AAX_eProperty_ProductID, JucePlugin_AAXProductId);
#if JucePlugin_AAXDisableBypass
properties->AddProperty (AAX_eProperty_CanBypass, false);
#else
properties->AddProperty (AAX_eProperty_CanBypass, true);
#endif
properties->AddProperty (AAX_eProperty_InputStemFormat, getFormatForChans (numInputs));
properties->AddProperty (AAX_eProperty_OutputStemFormat, getFormatForChans (numOutputs));
// 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' + channelConfigIndex);
properties->AddProperty (AAX_eProperty_PlugInID_AudioSuite, 'jyaa' + channelConfigIndex);
#if JucePlugin_AAXDisableMultiMono
properties->AddProperty (AAX_eProperty_Constraint_MultiMonoSupport, false);
#else
properties->AddProperty (AAX_eProperty_Constraint_MultiMonoSupport, true);
#endif
check (desc.AddProcessProc_Native (algorithmProcessCallback, properties));
}
static void getPlugInDescription (AAX_IEffectDescriptor& descriptor)
{
descriptor.AddName (JucePlugin_Desc);
descriptor.AddName (JucePlugin_Name);
descriptor.AddCategory (JucePlugin_AAXCategory);
#ifdef JucePlugin_AAXPageTableFile
// optional page table setting - define this macro in your AppConfig.h if you
// want to set this value - see Avid documentation for details about its format.
descriptor.AddResourceInfo (AAX_eResourceType_PageTable, JucePlugin_AAXPageTableFile);
#endif
check (descriptor.AddProcPtr ((void*) JuceAAX_GUI::Create, kAAX_ProcPtrID_Create_EffectGUI));
check (descriptor.AddProcPtr ((void*) JuceAAX_Processor::Create, kAAX_ProcPtrID_Create_EffectParameters));
const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations };
const int numConfigs = numElementsInArray (channelConfigs);
// You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations
// value in your JucePluginCharacteristics.h file..
jassert (numConfigs > 0);
for (int i = 0; i < numConfigs; ++i)
{
if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor())
{
const int numIns = channelConfigs [i][0];
const int numOuts = channelConfigs [i][1];
if (numIns <= 8 && numOuts <= 8) // AAX doesn't seem to handle more than 8 chans
{
createDescriptor (*desc, i, numIns, numOuts);
check (descriptor.AddComponent (desc));
}
}
}
}
Is there any way that I can get the plugin to support both 7.1DTS and 7.1SDDS formats in Pro tools?
