diff --git a/src/sfizz/FlexEnvelope.cpp b/src/sfizz/FlexEnvelope.cpp index 70dc0948..c58d3ae5 100644 --- a/src/sfizz/FlexEnvelope.cpp +++ b/src/sfizz/FlexEnvelope.cpp @@ -144,6 +144,9 @@ void FlexEnvelope::Impl::process(absl::Span out) const bool isReleased = isReleased_; while ((!stageSustained_ && currentTime_ >= stageTime_) || (stageSustained_ && isReleased)) { + // If stage is of zero duration, immediate transition to level + if (!stageSustained_ && stageTime_ == 0) + currentLevel_ = stageTargetLevel_; if (!advanceToNextStage()) { out.remove_prefix(frameIndex); fill(out, 0.0f);