diff --git a/modules/juce_audio_basics/utilities/juce_ADSR.h b/modules/juce_audio_basics/utilities/juce_ADSR.h index fb0d894233..52d47c8e90 100644 --- a/modules/juce_audio_basics/utilities/juce_ADSR.h +++ b/modules/juce_audio_basics/utilities/juce_ADSR.h @@ -124,6 +124,7 @@ public: } else { + envelopeVal = parameters.sustain; state = State::sustain; } } diff --git a/modules/juce_audio_basics/utilities/juce_ADSR_test.cpp b/modules/juce_audio_basics/utilities/juce_ADSR_test.cpp index 3f2770683c..deff93126f 100644 --- a/modules/juce_audio_basics/utilities/juce_ADSR_test.cpp +++ b/modules/juce_audio_basics/utilities/juce_ADSR_test.cpp @@ -152,6 +152,20 @@ struct ADSRTests : public UnitTest expect (isSustained (buffer, parameters.sustain)); } + beginTest ("Zero-length attack and decay releases correctly"); + { + adsr.reset(); + adsr.setParameters ({ 0.0f, 0.0f, parameters.sustain, parameters.release }); + + adsr.noteOn(); + adsr.noteOff(); + + auto buffer = getTestBuffer (sampleRate, parameters.release); + adsr.applyEnvelopeToBuffer (buffer, 0, buffer.getNumSamples()); + + expect (isDecreasing (buffer)); + } + beginTest ("Zero-length release resets to idle"); { adsr.reset();