From f6e0bb8b3f942d59d0373db3f53e464efca72ee3 Mon Sep 17 00:00:00 2001 From: Paul Ferrand Date: Wed, 19 Aug 2020 19:12:33 +0200 Subject: [PATCH] Add special cases for the rate transformation in envelopes For increasing linear ramps, a 0s ramp is an increment of 1.0 For decaying exponential ramps, a 0s ramp is a multiplicator of 0.0f --- src/sfizz/ADSREnvelope.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index b17bce09..78415f8a 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -20,13 +20,18 @@ Type ADSREnvelope::secondsToSamples (Type timeInSeconds) const noexcept template Type ADSREnvelope::secondsToLinRate (Type timeInSeconds) const noexcept { - timeInSeconds = std::max(timeInSeconds, config::virtuallyZero); + if (timeInSeconds == 0) + return 1.0f; + return 1 / (sampleRate * timeInSeconds); }; template Type ADSREnvelope::secondsToExpRate (Type timeInSeconds) const noexcept { + if (timeInSeconds == 0) + return 0.0f; + timeInSeconds = std::max(25e-3, timeInSeconds); return std::exp(-9.0 / (timeInSeconds * sampleRate)); };