From 792f992dfc5636543a976092c4f101acac5a92db Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 25 Oct 2021 15:41:02 +0100 Subject: [PATCH] ADSR: Fix bug when using applyEnvelopeToBuffer() with zero-length attack and decay --- modules/juce_audio_basics/utilities/juce_ADSR.h | 1 + .../juce_audio_basics/utilities/juce_ADSR_test.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+) 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();