From 88e76ff712b4460bf8aa6e23b367ebe4dfe36582 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Fri, 9 Mar 2018 13:24:59 +0000 Subject: [PATCH] Fixed a parameter change recursion bug in the AUv3 Wrapper --- .../AU/juce_AUv3_Wrapper.mm | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index 69e299ecd5..55aaec743e 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -455,6 +455,8 @@ public: //============================================================================== void init() { + inParameterChangedCallback = false; + AudioProcessor& processor = getAudioProcessor(); const AUAudioFrameCount maxFrames = [getAudioUnit() maximumFramesToRender]; @@ -901,6 +903,12 @@ public: void audioProcessorParameterChanged (AudioProcessor*, int idx, float newValue) override { + if (inParameterChangedCallback.get()) + { + inParameterChangedCallback = false; + return; + } + if (isPositiveAndBelow (idx, getAudioProcessor().getNumParameters())) { if (AUParameter* param = [paramTree parameterWithAddress: getAUParameterAddressForIndex (idx)]) @@ -1255,8 +1263,13 @@ private: { if (auto* param = getAudioProcessor().getParameters()[index]) { - param->setValue (value); - param->sendValueChangedMessageToListeners (value); + if (value != param->getValue()) + { + param->setValue (value); + + inParameterChangedCallback = true; + param->sendValueChangedMessageToListeners (value); + } } else if (isPositiveAndBelow (index, getAudioProcessor().getNumParameters())) { @@ -1603,6 +1616,8 @@ private: CurrentPositionInfo lastAudioHead; String contextName; + + ThreadLocalValue inParameterChangedCallback; }; const double JuceAudioUnitv3::kDefaultSampleRate = 44100.0;