diff --git a/include/Effect.h b/include/Effect.h index 8b2ff81f0..7180e8275 100644 --- a/include/Effect.h +++ b/include/Effect.h @@ -208,6 +208,8 @@ protected: } void reinitSRC(); + virtual void onEnabledChanged() {} + private: EffectChain * m_parent; diff --git a/plugins/DualFilter/DualFilter.cpp b/plugins/DualFilter/DualFilter.cpp index 4e66db988..40afa342a 100644 --- a/plugins/DualFilter/DualFilter.cpp +++ b/plugins/DualFilter/DualFilter.cpp @@ -218,6 +218,11 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames return isRunning(); } +void DualFilterEffect::onEnabledChanged() +{ + m_filter1->clearHistory(); + m_filter2->clearHistory(); +} diff --git a/plugins/DualFilter/DualFilter.h b/plugins/DualFilter/DualFilter.h index c179edbcc..29161039a 100644 --- a/plugins/DualFilter/DualFilter.h +++ b/plugins/DualFilter/DualFilter.h @@ -47,6 +47,8 @@ public: return &m_dfControls; } +protected: + void onEnabledChanged() override; private: DualFilterControls m_dfControls; diff --git a/src/core/Effect.cpp b/src/core/Effect.cpp index 7ede64e6b..aa6e56cd2 100644 --- a/src/core/Effect.cpp +++ b/src/core/Effect.cpp @@ -61,6 +61,10 @@ Effect::Effect( const Plugin::Descriptor * _desc, { m_autoQuitDisabled = true; } + + // Call the virtual method onEnabledChanged so that effects can react to changes, + // e.g. by resetting state. + connect(&m_enabledModel, &BoolModel::dataChanged, [this] { onEnabledChanged(); }); }