diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index aa07dda58d..4f56f34f91 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -849,7 +849,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; } @@ -1407,6 +1407,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 jmax (param.getNumSteps(), 2048); + } + void addAudioProcessorParameters() { auto& audioProcessor = getPluginInstance(); @@ -1448,7 +1456,6 @@ namespace AAXClasses aaxParamIDs.add (paramID); auto aaxParamID = aaxParamIDs.getReference (parameterIndex++).getCharPointer(); - paramMap.set (AAXClasses::getAAXParamHash (aaxParamID), juceParam); // is this a meter? @@ -1467,7 +1474,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