Don't update the delay after the phase has passed

This commit is contained in:
Paul Fd 2021-06-27 19:35:20 +02:00
parent d2ae2a0fe0
commit 788a4301a1

View file

@ -43,6 +43,7 @@ void ADSREnvelope::reset(const EGDescription& desc, const Region& region, int de
this->sampleRate = sampleRate; this->sampleRate = sampleRate;
desc_ = &desc; desc_ = &desc;
triggerVelocity_ = velocity; triggerVelocity_ = velocity;
currentState = State::Delay; // Has to be before the update
updateValues(delay); updateValues(delay);
releaseDelay = 0; releaseDelay = 0;
shouldRelease = false; shouldRelease = false;
@ -51,12 +52,13 @@ void ADSREnvelope::reset(const EGDescription& desc, const Region& region, int de
|| (region.loopMode == LoopMode::one_shot && region.isOscillator()) || (region.loopMode == LoopMode::one_shot && region.isOscillator())
); );
currentValue = this->start; currentValue = this->start;
currentState = State::Delay;
} }
void ADSREnvelope::updateValues(int delay) noexcept 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->attackStep = secondsToLinRate(desc_->getAttack(midiState_, triggerVelocity_, delay));
this->decayRate = secondsToExpRate(desc_->getDecay(midiState_, triggerVelocity_, delay)); this->decayRate = secondsToExpRate(desc_->getDecay(midiState_, triggerVelocity_, delay));
this->releaseRate = secondsToExpRate(desc_->getRelease(midiState_, triggerVelocity_, delay)); this->releaseRate = secondsToExpRate(desc_->getRelease(midiState_, triggerVelocity_, delay));