BogaudioModules

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

commit 45368d486bac5cdf16ff3b1147cac0633373e6ad
parent 62a0883bd4946d4056e15eadb8892f996ddd4024
Author: Matt Demanett <matt@demanett.net>
Date:   Mon,  6 May 2019 22:45:21 -0400

Fix jump() in dsp RandomWalk.

Diffstat:
Msrc/dsp/noise.cpp | 10++++++----
Msrc/dsp/noise.hpp | 1+
2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/dsp/noise.cpp b/src/dsp/noise.cpp @@ -34,20 +34,22 @@ void RandomWalk::setParams(float sampleRate, float change) { const float maxDamp = 0.98; const float minDamp = 0.9999; - _damp = maxDamp + (1 - change)*(minDamp - maxDamp); + _damp = maxDamp + (1.0f - change)*(minDamp - maxDamp); + + _biasDamp = 1.0f - change*(2.0f / sampleRate); } void RandomWalk::jump() { - // FIXME - _bias = _noise.next() * 5.0f; + _last = _bias = _noise.next() * 5.0f; _filter.reset(); } float RandomWalk::_next() { float delta = _noise.next(); - if ((_lastOut >= _max - _bias && delta > 0.0f) || (_lastOut <= _min - _bias && delta < 0.0f)) { + if ((_lastOut >= _max && delta > 0.0f) || (_lastOut <= _min && delta < 0.0f)) { delta = -delta; } _last = _damp*_last + delta; + _bias *= _biasDamp; return _lastOut = std::min(std::max(_bias + _filter.next(_last), _min), _max); } diff --git a/src/dsp/noise.hpp b/src/dsp/noise.hpp @@ -93,6 +93,7 @@ struct RandomWalk : Generator { float _lastOut = 0.0f; float _damp; float _bias = 0.0f; + float _biasDamp = 1.0f; WhiteNoiseGenerator _noise; LowPassFilter _filter;