From 4c0a7f6dfd6fa1b922e7788912ad3b315ef2e93c Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 18 Aug 2020 18:15:20 +0200 Subject: [PATCH 1/2] Adjust the ADSR exponential rate --- src/sfizz/ADSREnvelope.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index bfd7f3f8..472c9fd7 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -28,7 +28,7 @@ template Type ADSREnvelope::secondsToExpRate (Type timeInSeconds) const noexcept { timeInSeconds = std::max(25e-3, timeInSeconds); - return std::exp(-8.0 / (timeInSeconds * sampleRate)); + return std::exp(-9.0 / (timeInSeconds * sampleRate)); }; template From 12e2c95f5ce161dd868c4d5463273e922cad53b1 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Tue, 18 Aug 2020 19:43:36 +0200 Subject: [PATCH 2/2] Set the threshold of ADSR release to -80 dB --- src/sfizz/ADSREnvelope.cpp | 6 +++--- src/sfizz/Config.h | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index 472c9fd7..b17bce09 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -96,7 +96,7 @@ Type ADSREnvelope::getNextValue() noexcept return currentValue; case State::Release: currentValue *= releaseRate; - if (currentValue > config::virtuallyZero) + if (currentValue > config::egReleaseThreshold) return currentValue; currentState = State::Done; @@ -169,9 +169,9 @@ void ADSREnvelope::getBlock(absl::Span output) noexcept sfz::fill(output.first(count), currentValue); break; case State::Release: - while (count < size && (currentValue *= releaseRate) > config::virtuallyZero) + while (count < size && (currentValue *= releaseRate) > config::egReleaseThreshold) output[count++] = currentValue; - if (currentValue <= config::virtuallyZero) { + if (currentValue <= config::egReleaseThreshold) { currentValue = 0; currentState = State::Done; } diff --git a/src/sfizz/Config.h b/src/sfizz/Config.h index 3ec5f1a8..c13707ef 100644 --- a/src/sfizz/Config.h +++ b/src/sfizz/Config.h @@ -86,6 +86,11 @@ namespace config { modulated filter. The lower, the more CPU resources are consumed. */ constexpr int filterControlInterval { 16 }; + /** + Amplitude below which an exponential releasing envelope is considered as + finished. + */ + constexpr float egReleaseThreshold = 1e-4; /** Default metadata for MIDIName documents */