Browse Source

Fixed a parameter change recursion bug in the AUv3 Wrapper

tags/2021-05-28
Tom Poole 8 years ago
parent
commit
88e76ff712
1 changed files with 17 additions and 2 deletions
  1. +17
    -2
      modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm

+ 17
- 2
modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm View File

@@ -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<bool> inParameterChangedCallback;
};
const double JuceAudioUnitv3::kDefaultSampleRate = 44100.0;


Loading…
Cancel
Save