diff --git a/libs/ardour/ardour/dsp_filter.h b/libs/ardour/ardour/dsp_filter.h index ed31bb6012..c79732a018 100644 --- a/libs/ardour/ardour/dsp_filter.h +++ b/libs/ardour/ardour/dsp_filter.h @@ -248,6 +248,9 @@ namespace ARDOUR { namespace DSP { /** setup filter, set coefficients directly */ void configure (double a1, double a2, double b0, double b1, double b2); + /* copy coefficients from other instance, retain state */ + void configure (Biquad const&); + /** filter transfer function (filter response for spectrum visualization) * @param freq frequency * @return gain at given frequency in dB (clamped to -120..+120) diff --git a/libs/ardour/dsp_filter.cc b/libs/ardour/dsp_filter.cc index 8ff5a35033..861c61110c 100644 --- a/libs/ardour/dsp_filter.cc +++ b/libs/ardour/dsp_filter.cc @@ -196,6 +196,16 @@ Biquad::configure (double a1, double a2, double b0, double b1, double b2) _b2 = b2; } +void +Biquad::configure (Biquad const& other) +{ + _a1 = other._a1; + _a2 = other._a2; + _b0 = other._b0; + _b1 = other._b1; + _b2 = other._b2; +} + void Biquad::compute (Type type, double freq, double Q, double gain) { diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index c757558216..798909a0e0 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -2790,7 +2790,7 @@ LuaBindings::common (lua_State* L) .addConstructor () .addFunction ("run", &DSP::Biquad::run) .addFunction ("compute", &DSP::Biquad::compute) - .addFunction ("configure", &DSP::Biquad::configure) + .addFunction ("configure", (void (DSP::Biquad::*) (DSP::Biquad const&))&DSP::Biquad::configure) .addFunction ("reset", &DSP::Biquad::reset) .addFunction ("dB_at_freq", &DSP::Biquad::dB_at_freq) .endClass ()