7.1 SDDS Format


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:


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));
       #if JucePlugin_ProducesMidiOutput
        check (desc.AddMIDINode (JUCEAlgorithmIDs::midiNodeOut, AAX_eMIDINodeType_LocalOutput,
                                 JucePlugin_Name " Out", 0xffff));
        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);
        properties->AddProperty (AAX_eProperty_CanBypass,           true);
        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);
        properties->AddProperty (AAX_eProperty_Constraint_MultiMonoSupport, true);
        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);
        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?