diff --git a/Source/BaseVoice.cpp b/Source/BaseVoice.cpp index ada2bdc..67fa17b 100644 --- a/Source/BaseVoice.cpp +++ b/Source/BaseVoice.cpp @@ -89,6 +89,10 @@ void BaseVoice::stopNote (float, bool allowTailOff) { if (settingRefs->volumeSequence.hasRelease) { + if (settingRefs->volumeSequence.isInRelease(currentVolumeSequenceFrame)) { + // Already in release(Custom Env.) + return ; + } currentVolumeSequenceFrame = settingRefs->volumeSequence.releaseSequenceStartIndex; currentEnvelopeLevel = (float) (settingRefs->volumeSequence.valueAt (0)) / 15.0f; } @@ -100,6 +104,11 @@ void BaseVoice::stopNote (float, bool allowTailOff) return; } + + if (envelopePhase == kEnvelopePhaseR) { + // Already in release(ADSR) + return; + } envelopePhase = kEnvelopePhaseR; } diff --git a/Source/FrameSequence.h b/Source/FrameSequence.h index 953e8a3..007c0be 100644 --- a/Source/FrameSequence.h +++ b/Source/FrameSequence.h @@ -68,4 +68,8 @@ struct FrameSequence // No reach here } + + bool isInRelease(int index) { + return index >= releaseSequenceStartIndex; + } };