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 d9aa13da9e..b0f80cce43 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -301,9 +301,10 @@ namespace AAXClasses PluginInstanceInfo* pluginInstance; int32_t* isPrepared; - int32_t* sideChainBuffers; float* const* meterTapBuffers; + + int32_t* sideChainBuffers; }; struct JUCEAlgorithmIDs @@ -326,9 +327,9 @@ namespace AAXClasses pluginInstance = AAX_FIELD_INDEX (JUCEAlgorithmContext, pluginInstance), preparedFlag = AAX_FIELD_INDEX (JUCEAlgorithmContext, isPrepared), - sideChainBuffers = AAX_FIELD_INDEX (JUCEAlgorithmContext, sideChainBuffers), + meterTapBuffers = AAX_FIELD_INDEX (JUCEAlgorithmContext, meterTapBuffers), - meterTapBuffers = AAX_FIELD_INDEX (JUCEAlgorithmContext, meterTapBuffers) + sideChainBuffers = AAX_FIELD_INDEX (JUCEAlgorithmContext, sideChainBuffers) }; }; @@ -697,6 +698,20 @@ namespace AAXClasses break; } + case JUCEAlgorithmIDs::meterTapBuffers: + { + // this is a dummy field only when there are no aaxMeters + jassert (aaxMeters.size() == 0); + + { + const size_t numObjects = dataSize / sizeof (float*); + float** const objects = static_cast (data); + + for (size_t i = 0; i < numObjects; ++i) + new (objects + i) (float*) (nullptr); + } + break; + } } return AAX_SUCCESS; @@ -1772,6 +1787,12 @@ namespace AAXClasses check (desc.AddMeters (JUCEAlgorithmIDs::meterTapBuffers, meterIDs.getData(), static_cast (numMeters))); } + 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 meters + check (desc.AddPrivateData (JUCEAlgorithmIDs::meterTapBuffers, sizeof (uintptr_t))); + } // Create a property map AAX_IPropertyMap* const properties = desc.NewPropertyMap();