diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index 9a99a412..daf0872a 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -133,7 +133,8 @@ void ADSREnvelope::getBlock(absl::Span output) noexcept if (currentValue <= config::egReleaseThreshold) { currentState = State::Fadeout; currentValue = previousValue; - transitionDelta = -currentValue / (sampleRate * config::egTransitionTime); + transitionDelta = -max(config::egReleaseThreshold, currentValue) + / (sampleRate * config::egTransitionTime); } break; case State::Fadeout: diff --git a/src/sfizz/Voice.cpp b/src/sfizz/Voice.cpp index 8a73b80f..568688c2 100644 --- a/src/sfizz/Voice.cpp +++ b/src/sfizz/Voice.cpp @@ -1154,9 +1154,7 @@ void Voice::Impl::fillWithData(AudioSpan buffer) noexcept continue; } - if (!released()) - off(int(i), true); - + off(int(i), true); fill(indices->subspan(i), sampleEnd); fill(coeffs->subspan(i), 0x1.fffffep-1); break;