From 18a313671fa2aa0b9725eea2a603d66aa03b5ecf Mon Sep 17 00:00:00 2001 From: Gergo Koteles Date: Wed, 23 Apr 2025 03:32:38 +0200 Subject: [PATCH] Add need_cleanup flag for reverb The cleanup() overwrites about 120kbytes of memory, which may affect the GUI speed on slower PIs. It is better to run it before audio processing. --- src/effect_platervbstereo.cpp | 6 ++++++ src/effect_platervbstereo.h | 2 ++ src/minidexed.cpp | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/effect_platervbstereo.cpp b/src/effect_platervbstereo.cpp index 83bab9e..0eaca7a 100644 --- a/src/effect_platervbstereo.cpp +++ b/src/effect_platervbstereo.cpp @@ -228,6 +228,12 @@ void AudioEffectPlateReverb::doReverb(const float32_t* inblockL, const float32_t rv_time = rv_time_k; + if (need_cleanup) + { + cleanup(); + need_cleanup = false; + } + for (uint16_t i=0; i < len; i++) { // do the LFOs diff --git a/src/effect_platervbstereo.h b/src/effect_platervbstereo.h index 42dbaf9..6925722 100644 --- a/src/effect_platervbstereo.h +++ b/src/effect_platervbstereo.h @@ -106,8 +106,10 @@ public: float32_t get_size(void) {return rv_time_k;} float32_t get_level(void) {return reverb_level;} + void set_need_cleanup(void) {need_cleanup = true;}; void cleanup(void); private: + bool need_cleanup = false; float32_t reverb_level; float32_t input_attn; diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 30a66f6..24de593 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -1015,7 +1015,7 @@ void CMiniDexed::SetParameter (TParameter Parameter, int nValue) nValue=constrain((int)nValue,0,1); m_ReverbSpinLock.Acquire (); if (nValue) - reverb->cleanup (); + reverb->set_need_cleanup (); m_ReverbSpinLock.Release (); break;