Browse Source

ADSR: Fix bug when using applyEnvelopeToBuffer() with zero-length attack and decay

v6.1.6
ed 4 years ago
parent
commit
792f992dfc
2 changed files with 15 additions and 0 deletions
  1. +1
    -0
      modules/juce_audio_basics/utilities/juce_ADSR.h
  2. +14
    -0
      modules/juce_audio_basics/utilities/juce_ADSR_test.cpp

+ 1
- 0
modules/juce_audio_basics/utilities/juce_ADSR.h View File

@@ -124,6 +124,7 @@ public:
} }
else else
{ {
envelopeVal = parameters.sustain;
state = State::sustain; state = State::sustain;
} }
} }


+ 14
- 0
modules/juce_audio_basics/utilities/juce_ADSR_test.cpp View File

@@ -152,6 +152,20 @@ struct ADSRTests : public UnitTest
expect (isSustained (buffer, parameters.sustain)); 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"); beginTest ("Zero-length release resets to idle");
{ {
adsr.reset(); adsr.reset();


Loading…
Cancel
Save