From a050e0700ba910fe468c4b90df209b75f810952d Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 8 Jul 2016 09:03:50 +0100 Subject: [PATCH] Fix incorrect parameter id <-> index conversion when hosting AUs --- .../juce_AudioUnitPluginFormat.mm | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index 552d4154f3..fce17370dd 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -1080,28 +1080,39 @@ private: void eventCallback (const AudioUnitEvent& event, AudioUnitParameterValue newValue) { + int paramIndex = -1; + + if (event.mEventType == kAudioUnitEvent_ParameterValueChange + || event.mEventType == kAudioUnitEvent_BeginParameterChangeGesture + || event.mEventType == kAudioUnitEvent_EndParameterChangeGesture) + { + for (paramIndex = 0; paramIndex < parameters.size(); ++paramIndex) + { + const ParamInfo& p = *parameters.getUnchecked(paramIndex); + + if (p.paramID == event.mArgument.mParameter.mParameterID) + break; + } + + if (! isPositiveAndBelow (paramIndex, parameters.size())) + return; + } + switch (event.mEventType) { case kAudioUnitEvent_ParameterValueChange: - for (int i = 0; i < parameters.size(); ++i) { - const ParamInfo& p = *parameters.getUnchecked(i); - - if (p.paramID == event.mArgument.mParameter.mParameterID) - { - sendParamChangeMessageToListeners (i, (newValue - p.minValue) / (p.maxValue - p.minValue)); - break; - } + const ParamInfo& p = *parameters.getUnchecked(paramIndex); + sendParamChangeMessageToListeners (paramIndex, (newValue - p.minValue) / (p.maxValue - p.minValue)); } - break; case kAudioUnitEvent_BeginParameterChangeGesture: - beginParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID); + beginParameterChangeGesture (paramIndex); break; case kAudioUnitEvent_EndParameterChangeGesture: - endParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID); + endParameterChangeGesture (paramIndex); break; default: