From 98b44d70979627794ff9f7aa0323bf69809c15a7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Thu, 12 Mar 2020 22:58:50 +0100 Subject: [PATCH] Prepare the coeffs initially in filter-based effects --- src/sfizz/effects/Eq.cpp | 7 +++++++ src/sfizz/effects/Eq.h | 3 +++ src/sfizz/effects/Filter.cpp | 7 +++++++ src/sfizz/effects/Filter.h | 3 +++ 4 files changed, 20 insertions(+) diff --git a/src/sfizz/effects/Eq.cpp b/src/sfizz/effects/Eq.cpp index 90c5e032..a61f77e7 100644 --- a/src/sfizz/effects/Eq.cpp +++ b/src/sfizz/effects/Eq.cpp @@ -36,6 +36,7 @@ namespace fx { void Eq::setSampleRate(double sampleRate) { _filter.init(sampleRate); + prepareFilter(); } void Eq::setSamplesPerBlock(int samplesPerBlock) @@ -46,6 +47,7 @@ namespace fx { void Eq::clear() { _filter.clear(); + prepareFilter(); } void Eq::process(const float* const inputs[], float* const outputs[], unsigned nframes) @@ -93,5 +95,10 @@ namespace fx { return absl::make_unique(desc); } + void Eq::prepareFilter() + { + _filter.prepare(_desc.frequency, _desc.bandwidth, _desc.gain); + } + } // namespace fx } // namespace sfz diff --git a/src/sfizz/effects/Eq.h b/src/sfizz/effects/Eq.h index 7f1f2b63..ea6a5976 100644 --- a/src/sfizz/effects/Eq.h +++ b/src/sfizz/effects/Eq.h @@ -45,6 +45,9 @@ namespace fx { */ static std::unique_ptr makeInstance(absl::Span members); + private: + void prepareFilter(); + private: sfz::FilterEq _filter; EQDescription _desc; diff --git a/src/sfizz/effects/Filter.cpp b/src/sfizz/effects/Filter.cpp index a3783c9b..8b118ee0 100644 --- a/src/sfizz/effects/Filter.cpp +++ b/src/sfizz/effects/Filter.cpp @@ -38,6 +38,7 @@ namespace fx { void Filter::setSampleRate(double sampleRate) { _filter.init(sampleRate); + prepareFilter(); } void Filter::setSamplesPerBlock(int samplesPerBlock) @@ -48,6 +49,7 @@ namespace fx { void Filter::clear() { _filter.clear(); + prepareFilter(); } void Filter::process(const float* const inputs[], float* const outputs[], unsigned nframes) @@ -96,5 +98,10 @@ namespace fx { return absl::make_unique(desc); } + void Filter::prepareFilter() + { + _filter.prepare(_desc.cutoff, _desc.resonance, _desc.gain); + } + } // namespace fx } // namespace sfz diff --git a/src/sfizz/effects/Filter.h b/src/sfizz/effects/Filter.h index 51546041..9e91f798 100644 --- a/src/sfizz/effects/Filter.h +++ b/src/sfizz/effects/Filter.h @@ -45,6 +45,9 @@ namespace fx { */ static std::unique_ptr makeInstance(absl::Span members); + private: + void prepareFilter(); + private: sfz::Filter _filter; FilterDescription _desc;