upgrade to JUCE 5.4.3. Remove (probably) unused JUCE modules. Remove VST2 target (it's been end-of-life'd by Steinberg and by JUCE)
This commit is contained in:
		@ -41,6 +41,9 @@
 | 
			
		||||
 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
 | 
			
		||||
 #pragma clang diagnostic ignored "-Wsign-conversion"
 | 
			
		||||
 #pragma clang diagnostic ignored "-Wextra-semi"
 | 
			
		||||
 #if __has_warning("-Wpragma-pack")
 | 
			
		||||
  #pragma clang diagnostic ignored "-Wpragma-pack"
 | 
			
		||||
 #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
@ -162,22 +165,53 @@ namespace AAXClasses
 | 
			
		||||
 | 
			
		||||
    static AAXChannelStreamOrder aaxChannelOrder[] =
 | 
			
		||||
    {
 | 
			
		||||
        { AAX_eStemFormat_Mono,     { AudioChannelSet::centre, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_Stereo,   { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_LCR,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_LCRS,     { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_Quad,     { AudioChannelSet::left, AudioChannelSet::right,  AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_5_0,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_5_1,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_6_0,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_6_1,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_0_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_0_DTS,  { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_1_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_1_DTS,  { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_0_2,    { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_7_1_2,    { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
 | 
			
		||||
        { AAX_eStemFormat_None,     { AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
        { AAX_eStemFormat_Mono,     { AudioChannelSet::centre, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_Stereo,   { AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_LCR,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_LCRS,     { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_Quad,     { AudioChannelSet::left, AudioChannelSet::right,  AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_5_0,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_5_1,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround,
 | 
			
		||||
                                      AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_6_0,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
 | 
			
		||||
                                      AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_6_1,      { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround,
 | 
			
		||||
                                      AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_0_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right,
 | 
			
		||||
                                      AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_0_DTS,  { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
 | 
			
		||||
                                      AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_1_SDDS, { AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right,
 | 
			
		||||
                                      AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_1_DTS,  { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
 | 
			
		||||
                                      AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_0_2,    { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
 | 
			
		||||
                                      AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight, AudioChannelSet::unknown } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_7_1_2,    { AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide,
 | 
			
		||||
                                      AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE, AudioChannelSet::topSideLeft, AudioChannelSet::topSideRight } },
 | 
			
		||||
 | 
			
		||||
        { AAX_eStemFormat_None,     { AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown,
 | 
			
		||||
                                      AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown } },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static AAX_EStemFormat aaxFormats[] =
 | 
			
		||||
@ -624,6 +658,8 @@ namespace AAXClasses
 | 
			
		||||
 | 
			
		||||
    static void AAX_CALLBACK algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd);
 | 
			
		||||
 | 
			
		||||
    static Array<JuceAAX_Processor*> activeProcessors;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    class JuceAAX_Processor   : public AAX_CEffectParameters,
 | 
			
		||||
                                public juce::AudioPlayHead,
 | 
			
		||||
@ -642,11 +678,30 @@ namespace AAXClasses
 | 
			
		||||
            rebuildChannelMapArrays();
 | 
			
		||||
 | 
			
		||||
            AAX_CEffectParameters::GetNumberOfChunks (&juceChunkIndex);
 | 
			
		||||
            activeProcessors.add (this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ~JuceAAX_Processor()
 | 
			
		||||
        {
 | 
			
		||||
            activeProcessors.removeAllInstancesOf (this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static AAX_CEffectParameters* AAX_CALLBACK Create()
 | 
			
		||||
        {
 | 
			
		||||
            PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;
 | 
			
		||||
 | 
			
		||||
            if (PluginHostType::jucePlugInIsRunningInAudioSuiteFn == nullptr)
 | 
			
		||||
            {
 | 
			
		||||
                PluginHostType::jucePlugInIsRunningInAudioSuiteFn = [] (AudioProcessor& processor)
 | 
			
		||||
                {
 | 
			
		||||
                    for (auto* p : activeProcessors)
 | 
			
		||||
                        if (&p->getPluginInstance() == &processor)
 | 
			
		||||
                            return p->isInAudioSuite();
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return new JuceAAX_Processor();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -849,7 +904,7 @@ namespace AAXClasses
 | 
			
		||||
        AAX_Result GetParameterNumberofSteps (AAX_CParamID paramID, int32_t* result) const
 | 
			
		||||
        {
 | 
			
		||||
            if (auto* param = getParameterFromID (paramID))
 | 
			
		||||
                *result = param->getNumSteps();
 | 
			
		||||
                *result = getSafeNumberOfParameterSteps (*param);
 | 
			
		||||
 | 
			
		||||
            return AAX_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
@ -1091,7 +1146,9 @@ namespace AAXClasses
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                isSuspended = true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (isSuspended)
 | 
			
		||||
            {
 | 
			
		||||
@ -1311,6 +1368,14 @@ namespace AAXClasses
 | 
			
		||||
            return foundValid;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool isInAudioSuite()
 | 
			
		||||
        {
 | 
			
		||||
            AAX_CBoolean res;
 | 
			
		||||
            Controller()->GetIsAudioSuite (&res);
 | 
			
		||||
 | 
			
		||||
            return res;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        friend class JuceAAX_GUI;
 | 
			
		||||
        friend void AAX_CALLBACK AAXClasses::algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd);
 | 
			
		||||
@ -1405,6 +1470,14 @@ namespace AAXClasses
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Some older Pro Tools control surfaces (EUCON [PT version 12.4] and
 | 
			
		||||
        // Avid S6 before version 2.1) cannot cope with a large number of
 | 
			
		||||
        // parameter steps.
 | 
			
		||||
        static int32_t getSafeNumberOfParameterSteps (const AudioProcessorParameter& param)
 | 
			
		||||
        {
 | 
			
		||||
            return jmin (param.getNumSteps(), 2048);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void addAudioProcessorParameters()
 | 
			
		||||
        {
 | 
			
		||||
            auto& audioProcessor = getPluginInstance();
 | 
			
		||||
@ -1446,7 +1519,6 @@ namespace AAXClasses
 | 
			
		||||
                aaxParamIDs.add (paramID);
 | 
			
		||||
                auto aaxParamID = aaxParamIDs.getReference (parameterIndex++).getCharPointer();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                paramMap.set (AAXClasses::getAAXParamHash (aaxParamID), juceParam);
 | 
			
		||||
 | 
			
		||||
                // is this a meter?
 | 
			
		||||
@ -1465,7 +1537,7 @@ namespace AAXClasses
 | 
			
		||||
 | 
			
		||||
                parameter->AddShortenedName (juceParam->getName (4).toRawUTF8());
 | 
			
		||||
 | 
			
		||||
                auto parameterNumSteps = juceParam->getNumSteps();
 | 
			
		||||
                auto parameterNumSteps = getSafeNumberOfParameterSteps (*juceParam);
 | 
			
		||||
                parameter->SetNumberOfSteps ((uint32_t) parameterNumSteps);
 | 
			
		||||
 | 
			
		||||
               #if JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE
 | 
			
		||||
@ -1492,10 +1564,6 @@ namespace AAXClasses
 | 
			
		||||
        bool getMainBusFormats (AudioChannelSet& inputSet, AudioChannelSet& outputSet)
 | 
			
		||||
        {
 | 
			
		||||
            auto& audioProcessor = getPluginInstance();
 | 
			
		||||
           #if ! JucePlugin_IsMidiEffect
 | 
			
		||||
            auto inputBuses  = audioProcessor.getBusCount (true);
 | 
			
		||||
            auto outputBuses = audioProcessor.getBusCount (false);
 | 
			
		||||
           #endif
 | 
			
		||||
 | 
			
		||||
           #if JucePlugin_IsMidiEffect
 | 
			
		||||
            // MIDI effect plug-ins do not support any audio channels
 | 
			
		||||
@ -1505,24 +1573,25 @@ namespace AAXClasses
 | 
			
		||||
            inputSet = outputSet = AudioChannelSet();
 | 
			
		||||
            return true;
 | 
			
		||||
           #else
 | 
			
		||||
            auto inputBuses  = audioProcessor.getBusCount (true);
 | 
			
		||||
            auto outputBuses = audioProcessor.getBusCount (false);
 | 
			
		||||
 | 
			
		||||
            AAX_EStemFormat inputStemFormat = AAX_eStemFormat_None;
 | 
			
		||||
            check (Controller()->GetInputStemFormat (&inputStemFormat));
 | 
			
		||||
 | 
			
		||||
            AAX_EStemFormat outputStemFormat = AAX_eStemFormat_None;
 | 
			
		||||
            check (Controller()->GetOutputStemFormat (&outputStemFormat));
 | 
			
		||||
 | 
			
		||||
           #if JucePlugin_IsSynth
 | 
			
		||||
            if (inputBuses == 0)
 | 
			
		||||
                inputStemFormat = AAX_eStemFormat_None;
 | 
			
		||||
           #endif
 | 
			
		||||
            #if JucePlugin_IsSynth
 | 
			
		||||
             if (inputBuses == 0)
 | 
			
		||||
                 inputStemFormat = AAX_eStemFormat_None;
 | 
			
		||||
            #endif
 | 
			
		||||
 | 
			
		||||
            inputSet  = (inputBuses  > 0 ? channelSetFromStemFormat (inputStemFormat,  false) : AudioChannelSet());
 | 
			
		||||
            outputSet = (outputBuses > 0 ? channelSetFromStemFormat (outputStemFormat, false) : AudioChannelSet());
 | 
			
		||||
 | 
			
		||||
            if (  (inputSet  == AudioChannelSet::disabled() && inputStemFormat  != AAX_eStemFormat_None)
 | 
			
		||||
                || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)
 | 
			
		||||
                || (inputSet  != AudioChannelSet::disabled() && inputBuses  == 0)
 | 
			
		||||
                || (outputSet != AudioChannelSet::disabled() && outputBuses == 0))
 | 
			
		||||
            if ((inputSet == AudioChannelSet::disabled() && inputStemFormat != AAX_eStemFormat_None) || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)
 | 
			
		||||
                || (inputSet != AudioChannelSet::disabled() && inputBuses == 0) || (outputSet != AudioChannelSet::disabled() && outputBuses == 0))
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
@ -1577,6 +1646,27 @@ namespace AAXClasses
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (isInAudioSuite())
 | 
			
		||||
            {
 | 
			
		||||
                // AudioSuite doesnt support multiple output buses
 | 
			
		||||
                for (int i = 1; i < newLayout.outputBuses.size(); ++i)
 | 
			
		||||
                    newLayout.outputBuses.getReference (i) = AudioChannelSet::disabled();
 | 
			
		||||
 | 
			
		||||
                if (! audioProcessor.checkBusesLayoutSupported (newLayout))
 | 
			
		||||
                {
 | 
			
		||||
                    // your plug-in needs to support a single output bus if running in AudioSuite
 | 
			
		||||
                    jassertfalse;
 | 
			
		||||
 | 
			
		||||
                    if (isPrepared)
 | 
			
		||||
                    {
 | 
			
		||||
                        isPrepared = false;
 | 
			
		||||
                        audioProcessor.releaseResources();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return AAX_ERROR_UNIMPLEMENTED;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const bool layoutChanged = (oldLayout != newLayout);
 | 
			
		||||
 | 
			
		||||
            if (layoutChanged)
 | 
			
		||||
@ -1607,6 +1697,9 @@ namespace AAXClasses
 | 
			
		||||
                audioProcessor.prepareToPlay (sampleRate, lastBufferSize);
 | 
			
		||||
                maxBufferSize = lastBufferSize;
 | 
			
		||||
 | 
			
		||||
                midiBuffer.ensureSize (2048);
 | 
			
		||||
                midiBuffer.clear();
 | 
			
		||||
 | 
			
		||||
                sideChainBuffer.calloc (static_cast<size_t> (maxBufferSize));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -1704,6 +1797,103 @@ namespace AAXClasses
 | 
			
		||||
            updateSidechainState();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        static AudioProcessor::CurveData::Type aaxCurveTypeToJUCE (AAX_CTypeID type) noexcept
 | 
			
		||||
        {
 | 
			
		||||
            switch (type)
 | 
			
		||||
            {
 | 
			
		||||
            case AAX_eCurveType_EQ:              return AudioProcessor::CurveData::Type::EQ;
 | 
			
		||||
            case AAX_eCurveType_Dynamics:        return AudioProcessor::CurveData::Type::Dynamics;
 | 
			
		||||
            case AAX_eCurveType_Reduction:       return AudioProcessor::CurveData::Type::GainReduction;
 | 
			
		||||
            default:  break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return AudioProcessor::CurveData::Type::Unknown;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uint32_t getAAXMeterIdForParamId (const String& paramID) const noexcept
 | 
			
		||||
        {
 | 
			
		||||
            int idx;
 | 
			
		||||
 | 
			
		||||
            for (idx = 0; idx < aaxMeters.size(); ++idx)
 | 
			
		||||
                if (LegacyAudioParameter::getParamID (aaxMeters[idx], false) == paramID)
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
            // you sepecified a parameter id in your curve but the parameter does not have the meter
 | 
			
		||||
            // category
 | 
			
		||||
            jassert (idx < aaxMeters.size());
 | 
			
		||||
            return 'Metr' + static_cast<AAX_CTypeID> (idx);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        AAX_Result GetCurveData (AAX_CTypeID iCurveType, const float * iValues, uint32_t iNumValues, float * oValues ) const override
 | 
			
		||||
        {
 | 
			
		||||
            auto curveType = aaxCurveTypeToJUCE (iCurveType);
 | 
			
		||||
 | 
			
		||||
            if (curveType != AudioProcessor::CurveData::Type::Unknown)
 | 
			
		||||
            {
 | 
			
		||||
                auto& audioProcessor = getPluginInstance();
 | 
			
		||||
                auto curve = audioProcessor.getResponseCurve (curveType);
 | 
			
		||||
 | 
			
		||||
                if (curve.curve)
 | 
			
		||||
                {
 | 
			
		||||
                    if (oValues != nullptr && iValues != nullptr)
 | 
			
		||||
                    {
 | 
			
		||||
                        for (uint32_t i = 0; i < iNumValues; ++i)
 | 
			
		||||
                            oValues[i] = curve.curve (iValues[i]);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return AAX_SUCCESS;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return AAX_ERROR_UNIMPLEMENTED;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        AAX_Result GetCurveDataMeterIds (AAX_CTypeID iCurveType, uint32_t *oXMeterId, uint32_t *oYMeterId)  const override
 | 
			
		||||
        {
 | 
			
		||||
            auto curveType = aaxCurveTypeToJUCE (iCurveType);
 | 
			
		||||
 | 
			
		||||
            if (curveType != AudioProcessor::CurveData::Type::Unknown)
 | 
			
		||||
            {
 | 
			
		||||
                auto& audioProcessor = getPluginInstance();
 | 
			
		||||
                auto curve = audioProcessor.getResponseCurve (curveType);
 | 
			
		||||
 | 
			
		||||
                if (curve.curve && curve.xMeterID.isNotEmpty() && curve.yMeterID.isNotEmpty())
 | 
			
		||||
                {
 | 
			
		||||
                    if (oXMeterId != nullptr) *oXMeterId = getAAXMeterIdForParamId (curve.xMeterID);
 | 
			
		||||
                    if (oYMeterId != nullptr) *oYMeterId = getAAXMeterIdForParamId (curve.yMeterID);
 | 
			
		||||
 | 
			
		||||
                    return AAX_SUCCESS;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return AAX_ERROR_UNIMPLEMENTED;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        AAX_Result GetCurveDataDisplayRange (AAX_CTypeID iCurveType, float *oXMin, float *oXMax, float *oYMin, float *oYMax) const override
 | 
			
		||||
        {
 | 
			
		||||
            auto curveType = aaxCurveTypeToJUCE (iCurveType);
 | 
			
		||||
 | 
			
		||||
            if (curveType != AudioProcessor::CurveData::Type::Unknown)
 | 
			
		||||
            {
 | 
			
		||||
                auto& audioProcessor = getPluginInstance();
 | 
			
		||||
                auto curve = audioProcessor.getResponseCurve (curveType);
 | 
			
		||||
 | 
			
		||||
                if (curve.curve)
 | 
			
		||||
                {
 | 
			
		||||
                    if (oXMin != nullptr) *oXMin = curve.xRange.getStart();
 | 
			
		||||
                    if (oXMax != nullptr) *oXMax = curve.xRange.getEnd();
 | 
			
		||||
                    if (oYMin != nullptr) *oYMin = curve.yRange.getStart();
 | 
			
		||||
                    if (oYMax != nullptr) *oYMax = curve.yRange.getEnd();
 | 
			
		||||
 | 
			
		||||
                    return AAX_SUCCESS;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return AAX_ERROR_UNIMPLEMENTED;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept
 | 
			
		||||
        {
 | 
			
		||||
@ -1792,7 +1982,7 @@ namespace AAXClasses
 | 
			
		||||
        // and the size of the data returned. To avoid generating
 | 
			
		||||
        // it again in GetChunk, we need to store it somewhere.
 | 
			
		||||
        // However, as GetChunkSize and GetChunk can be called
 | 
			
		||||
        // on different threads, we store it in thread dependant storage
 | 
			
		||||
        // on different threads, we store it in thread dependent storage
 | 
			
		||||
        // in a hash map with the thread id as a key.
 | 
			
		||||
        mutable ThreadLocalValue<ChunkMemoryBlock> perThreadFilterData;
 | 
			
		||||
        CriticalSection perThreadDataLock;
 | 
			
		||||
@ -1997,11 +2187,17 @@ namespace AAXClasses
 | 
			
		||||
            check (desc.AddSideChainIn (JUCEAlgorithmIDs::sideChainBuffers));
 | 
			
		||||
            properties->AddProperty (AAX_eProperty_SupportsSideChainInput, true);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // AAX does not allow there to be any gaps in the fields of the algorithm context structure
 | 
			
		||||
            // so just add a dummy one here if there aren't any side chains
 | 
			
		||||
            check (desc.AddPrivateData (JUCEAlgorithmIDs::sideChainBuffers, sizeof (uintptr_t)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        auto maxAuxBuses = jmax (0, jmin (15, fullLayout.outputBuses.size() - 1));
 | 
			
		||||
 | 
			
		||||
        // add the output buses
 | 
			
		||||
        // This is incrdibly dumb: the output bus format must be well defined
 | 
			
		||||
        // This is incredibly dumb: the output bus format must be well defined
 | 
			
		||||
        // for every main bus in/out format pair. This means that there cannot
 | 
			
		||||
        // be two configurations with different aux formats but
 | 
			
		||||
        // identical main bus in/out formats.
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user