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?