From fd4276e3f2540491ad368eae509f212e14360ffd Mon Sep 17 00:00:00 2001 From: Max Maisel Date: Fri, 12 Feb 2021 15:10:14 +0100 Subject: [PATCH] Clamp attack/release times at 1/sample_rate. Otherwise, numerical instability could occur. Signed-off-by: Max Maisel --- src/effects/Compressor2.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/effects/Compressor2.cpp b/src/effects/Compressor2.cpp index f458bd0bf..5fa0aa4e3 100644 --- a/src/effects/Compressor2.cpp +++ b/src/effects/Compressor2.cpp @@ -313,6 +313,8 @@ void ExpFitEnvelopeDetector::Reset(float value) void ExpFitEnvelopeDetector::SetParams( float sampleRate, float attackTime, float releaseTime) { + attackTime = std::max(attackTime, 1.0f / sampleRate); + releaseTime = std::max(releaseTime, 1.0f / sampleRate); mAttackFactor = exp(-1.0 / (sampleRate * attackTime)); mReleaseFactor = exp(-1.0 / (sampleRate * releaseTime)); } @@ -428,6 +430,9 @@ void Pt1EnvelopeDetector::Reset(float value) void Pt1EnvelopeDetector::SetParams( float sampleRate, float attackTime, float releaseTime) { + attackTime = std::max(attackTime, 1.0f / sampleRate); + releaseTime = std::max(releaseTime, 1.0f / sampleRate); + // Approximate peak amplitude correction factor. if(mCorrectGain) mGainCorrection = 1.0 + exp(attackTime / 30.0);