From 788a4301a10e2640dfed6b6d416dceabc768163a Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Sun, 27 Jun 2021 19:35:20 +0200 Subject: [PATCH] Don't update the delay after the phase has passed --- src/sfizz/ADSREnvelope.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sfizz/ADSREnvelope.cpp b/src/sfizz/ADSREnvelope.cpp index cda4ba31..6167b689 100644 --- a/src/sfizz/ADSREnvelope.cpp +++ b/src/sfizz/ADSREnvelope.cpp @@ -43,6 +43,7 @@ void ADSREnvelope::reset(const EGDescription& desc, const Region& region, int de this->sampleRate = sampleRate; desc_ = &desc; triggerVelocity_ = velocity; + currentState = State::Delay; // Has to be before the update updateValues(delay); releaseDelay = 0; shouldRelease = false; @@ -51,12 +52,13 @@ void ADSREnvelope::reset(const EGDescription& desc, const Region& region, int de || (region.loopMode == LoopMode::one_shot && region.isOscillator()) ); currentValue = this->start; - currentState = State::Delay; } void ADSREnvelope::updateValues(int delay) noexcept { - this->delay = delay + secondsToSamples(desc_->getDelay(midiState_, triggerVelocity_, delay)); + if (currentState == State::Delay) + this->delay = delay + secondsToSamples(desc_->getDelay(midiState_, triggerVelocity_, delay)); + this->attackStep = secondsToLinRate(desc_->getAttack(midiState_, triggerVelocity_, delay)); this->decayRate = secondsToExpRate(desc_->getDecay(midiState_, triggerVelocity_, delay)); this->releaseRate = secondsToExpRate(desc_->getRelease(midiState_, triggerVelocity_, delay));