From 54d2b7342cf16770fdc2160f771c0ecb37e0505f Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Wed, 7 Oct 2020 13:19:07 +0200 Subject: [PATCH] Clamp the cutoff values to avoid filters blowing up --- src/sfizz/FilterPool.cpp | 1 + src/sfizz/SIMDHelpers.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/sfizz/FilterPool.cpp b/src/sfizz/FilterPool.cpp index 2463e721..d8c16e40 100644 --- a/src/sfizz/FilterPool.cpp +++ b/src/sfizz/FilterPool.cpp @@ -75,6 +75,7 @@ void sfz::FilterHolder::process(const float** inputs, float** outputs, unsigned for (size_t i = 0; i < numFrames; ++i) (*cutoffSpan)[i] *= centsFactor(mod[i]); } + sfz::clampAll(*cutoffSpan, Default::filterCutoffRange); fill(*resonanceSpan, baseResonance); if (float* mod = mm.getModulation(resonanceTarget)) diff --git a/src/sfizz/SIMDHelpers.h b/src/sfizz/SIMDHelpers.h index 08371613..a7b9a08c 100644 --- a/src/sfizz/SIMDHelpers.h +++ b/src/sfizz/SIMDHelpers.h @@ -26,6 +26,7 @@ #pragma once #include "Config.h" #include "Debug.h" +#include "Range.h" #include "MathHelpers.h" #include "simd/HelpersScalar.h" #include @@ -720,6 +721,12 @@ void clampAll(absl::Span input, T low, T high) noexcept clampAll(input.data(), low, high, input.size()); } +template +void clampAll(absl::Span input, sfz::Range range) noexcept +{ + clampAll(input.data(), range.getStart(), range.getEnd(), input.size()); +} + /** * @brief Check that all values are within bounds (inclusive) *