From 9a2f91f5ef101a92c4a916cefd9f817ead63a160 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Fri, 12 Mar 2021 15:12:19 +0100 Subject: [PATCH] Safeguard against EQ bandwidth low values --- src/sfizz/dsp/filters/sfz_filters.dsp | 2 +- src/sfizz/gen/filters/sfz2chEqPeak.hxx | 2 +- src/sfizz/gen/filters/sfzEqPeak.hxx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sfizz/dsp/filters/sfz_filters.dsp b/src/sfizz/dsp/filters/sfz_filters.dsp index 1f47ce04..8efb07a1 100644 --- a/src/sfizz/dsp/filters/sfz_filters.dsp +++ b/src/sfizz/dsp/filters/sfz_filters.dsp @@ -94,7 +94,7 @@ sfzPeq = fm.rbjPeakingEqSmooth(smoothCoefs,cutoff,pkShGain,Q); // the SFZ equalizer band sfzEqPeak = fm.rbjPeakingEqSmooth(smoothCoefs,cutoff,pkShGain,Q) with { - Q = 1./(2.*ma.sinh(0.5*log(2)*bandwidth*w0/sin(w0))); + Q = 1./(2.*ma.sinh(0.5*log(2)*max(1e-3, bandwidth)*w0/sin(w0))); w0 = 2*ma.PI*max(0,cutoff)/ma.SR; }; diff --git a/src/sfizz/gen/filters/sfz2chEqPeak.hxx b/src/sfizz/gen/filters/sfz2chEqPeak.hxx index 1849c94f..cac02e65 100644 --- a/src/sfizz/gen/filters/sfz2chEqPeak.hxx +++ b/src/sfizz/gen/filters/sfz2chEqPeak.hxx @@ -174,7 +174,7 @@ class faust2chEqPeak : public sfzFilterDsp { double fSlow2 = (fConst2 * fSlow1); double fSlow3 = std::sin(fSlow2); double fSlow4 = std::pow(10.0, (0.025000000000000001 * double(fVslider0))); - double fSlow5 = std::max(0.001, (0.5 / double(sinh(double((fConst3 * ((fSlow1 * double(fVslider1)) / fSlow3))))))); + double fSlow5 = std::max(0.001, (0.5 / double(sinh(double((fConst3 * ((fSlow1 * std::max(0.001, double(fVslider1))) / fSlow3))))))); double fSlow6 = (0.5 * (fSlow3 / (fSlow4 * fSlow5))); double fSlow7 = (fSlow6 + 1.0); double fSlow8 = (1.0 - fSlow0); diff --git a/src/sfizz/gen/filters/sfzEqPeak.hxx b/src/sfizz/gen/filters/sfzEqPeak.hxx index 2d6f26e5..251815b8 100644 --- a/src/sfizz/gen/filters/sfzEqPeak.hxx +++ b/src/sfizz/gen/filters/sfzEqPeak.hxx @@ -152,7 +152,7 @@ class faustEqPeak : public sfzFilterDsp { double fSlow2 = (fConst2 * fSlow1); double fSlow3 = std::sin(fSlow2); double fSlow4 = std::pow(10.0, (0.025000000000000001 * double(fVslider0))); - double fSlow5 = std::max(0.001, (0.5 / double(sinh(double((fConst3 * ((fSlow1 * double(fVslider1)) / fSlow3))))))); + double fSlow5 = std::max(0.001, (0.5 / double(sinh(double((fConst3 * ((fSlow1 * std::max(0.001, double(fVslider1))) / fSlow3))))))); double fSlow6 = (0.5 * (fSlow3 / (fSlow4 * fSlow5))); double fSlow7 = (fSlow6 + 1.0); double fSlow8 = (1.0 - fSlow0);