diff --git a/plugins/LOMM/LOMM.cpp b/plugins/LOMM/LOMM.cpp index 6dc640626..482a59b7e 100644 --- a/plugins/LOMM/LOMM.cpp +++ b/plugins/LOMM/LOMM.cpp @@ -55,6 +55,7 @@ LOMMEffect::LOMMEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* m_lp2(m_sampleRate), m_hp1(m_sampleRate), m_hp2(m_sampleRate), + m_ap(m_sampleRate), m_needsUpdate(true), m_coeffPrecalc(-0.05), m_crestTimeConst(0.999), @@ -67,6 +68,8 @@ LOMMEffect::LOMMEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* m_yL[1][0] = m_yL[1][1] = LOMM_MIN_FLOOR; m_yL[2][0] = m_yL[2][1] = LOMM_MIN_FLOOR; + m_ap.setFilterType(BasicFilters<2>::FilterType::AllPass); + connect(Engine::audioEngine(), SIGNAL(sampleRateChanged()), this, SLOT(changeSampleRate())); emit changeSampleRate(); } @@ -117,6 +120,7 @@ bool LOMMEffect::processAudioBuffer(sampleFrame* buf, const fpp_t frames) { m_lp1.setLowpass(m_lommControls.m_split1Model.value()); m_hp1.setHighpass(m_lommControls.m_split1Model.value()); + m_ap.calcFilterCoeffs(m_lommControls.m_split1Model.value(), 0.70710678118); } if (m_needsUpdate || m_lommControls.m_split2Model.isValueChanged()) { @@ -224,9 +228,11 @@ bool LOMMEffect::processAudioBuffer(sampleFrame* buf, const fpp_t frames) float crestFactorValTemp = ((m_crestFactorVal[i] - LOMM_AUTO_TIME_ADJUST) * autoTime) + LOMM_AUTO_TIME_ADJUST; // Crossover filters - bands[0][i] = m_hp1.update(s[i], i); - bands[1][i] = m_hp2.update(m_lp1.update(s[i], i), i); bands[2][i] = m_lp2.update(s[i], i); + bands[1][i] = m_hp2.update(s[i], i); + bands[0][i] = m_hp1.update(bands[1][i], i); + bands[1][i] = m_lp1.update(bands[1][i], i); + bands[2][i] = m_ap.update(bands[2][i], i); if (!split1Enabled) { diff --git a/plugins/LOMM/LOMM.h b/plugins/LOMM/LOMM.h index 039f80b6a..c1a5aef70 100644 --- a/plugins/LOMM/LOMM.h +++ b/plugins/LOMM/LOMM.h @@ -73,6 +73,8 @@ private: StereoLinkwitzRiley m_hp1; StereoLinkwitzRiley m_hp2; + BasicFilters<2> m_ap; + bool m_needsUpdate; float m_coeffPrecalc;