| @@ -102,6 +102,12 @@ public: | |||||
| { | { | ||||
| envelopeVal = 0.0f; | envelopeVal = 0.0f; | ||||
| currentState = State::idle; | currentState = State::idle; | ||||
| if (resetReleaseRate) | |||||
| { | |||||
| releaseRate = static_cast<float> (sustainLevel / (currentParameters.release * sr)); | |||||
| resetReleaseRate = false; | |||||
| } | |||||
| } | } | ||||
| /** Starts the attack phase of the envelope. */ | /** Starts the attack phase of the envelope. */ | ||||
| @@ -120,7 +126,10 @@ public: | |||||
| if (releaseRate > 0.0f) | if (releaseRate > 0.0f) | ||||
| { | { | ||||
| if (currentState != State::sustain) | if (currentState != State::sustain) | ||||
| { | |||||
| releaseRate = static_cast<float> (envelopeVal / (currentParameters.release * sr)); | releaseRate = static_cast<float> (envelopeVal / (currentParameters.release * sr)); | ||||
| resetReleaseRate = true; | |||||
| } | |||||
| currentState = State::release; | currentState = State::release; | ||||
| } | } | ||||
| @@ -229,11 +238,8 @@ private: | |||||
| Parameters currentParameters; | Parameters currentParameters; | ||||
| double sr = 0.0; | double sr = 0.0; | ||||
| float envelopeVal = 0.0f; | |||||
| float sustainLevel = 0.0f; | |||||
| float attackRate = 0.0f, decayRate = 0.0f, releaseRate = 0.0f; | |||||
| float envelopeVal = 0.0f, sustainLevel = 0.0f, attackRate = 0.0f, decayRate = 0.0f, releaseRate = 0.0f; | |||||
| bool resetReleaseRate = false; | |||||
| }; | }; | ||||
| } // namespace juce | } // namespace juce | ||||