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) *