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:
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;