BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit d6a8c142d0c9c3fe2493ec1b0416b7c9d8ad7cc8
parent 2f0584a2ddafbf452298f0083caa2bcecf654bcd
Author: Matt Demanett <matt@demanett.net>
Date:   Mon,  9 Mar 2020 23:09:47 -0400

Fix problem with ADSR dsp where abrupt parameter changes could produce very large outputs. #103

Diffstat:
Msrc/dsp/envelope.cpp | 6+++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/dsp/envelope.cpp b/src/dsp/envelope.cpp @@ -125,13 +125,13 @@ float ADSR::_next() { } case ATTACK_STAGE: { _stageProgress += _sampleTime; - _envelope = _stageProgress / _attack; + _envelope = std::max(1.0f, _stageProgress / _attack); _envelope = powf(_envelope, _attackShape); break; } case DECAY_STAGE: { _stageProgress += _sampleTime; - _envelope = _stageProgress / _decay; + _envelope = std::max(1.0f, _stageProgress / _decay); _envelope = powf(_envelope, _decayShape); _envelope *= 1.0f - _sustain; _envelope = 1.0f - _envelope; @@ -143,7 +143,7 @@ float ADSR::_next() { } case RELEASE_STAGE: { _stageProgress += _sampleTime; - _envelope = _stageProgress / _release; + _envelope = std::max(1.0f, _stageProgress / _release); _envelope = powf(_envelope, _releaseShape); _envelope *= _releaseLevel; _envelope = _releaseLevel - _envelope;