BogaudioModules

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

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

Walks: apply slew limiting to the walk.

Diffstat:
Msrc/Walk.cpp | 3++-
Msrc/Walk.hpp | 2++
Msrc/Walk2.cpp | 13++++++++-----
Msrc/Walk2.hpp | 2++
4 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/Walk.cpp b/src/Walk.cpp @@ -8,6 +8,7 @@ void Walk::onReset() { void Walk::onSampleRateChange() { _modulationStep = modulationSteps; + _slew.setParams(engineGetSampleRate(), 100.0f, 10.0f); } void Walk::step() { @@ -26,7 +27,7 @@ void Walk::step() { _walk.setParams(engineGetSampleRate(), rate); } - float out = _walk.next(); + float out = _slew.next(_walk.next()); out *= params[SCALE_PARAM].value; out += params[OFFSET_PARAM].value * 5.0f; outputs[OUT_OUTPUT].value = out; diff --git a/src/Walk.hpp b/src/Walk.hpp @@ -2,6 +2,7 @@ #include "bogaudio.hpp" #include "dsp/noise.hpp" +#include "dsp/signal.hpp" using namespace bogaudio::dsp; @@ -39,6 +40,7 @@ struct Walk : Module { int _modulationStep = 0; Trigger _trigger; RandomWalk _walk; + SlewLimiter _slew; float _hold = 0.0f; Walk() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { diff --git a/src/Walk2.cpp b/src/Walk2.cpp @@ -10,7 +10,7 @@ void Walk2::onReset() { void Walk2::onSampleRateChange() { _modulationStep = modulationSteps; - _historySteps = (historySeconds * engineGetSampleRate()) / historyPoints; + _historySteps = (historySeconds * engineGetSampleRate();) / historyPoints; } void Walk2::step() { @@ -20,6 +20,7 @@ void Walk2::step() { ++_modulationStep; if (_modulationStep >= modulationSteps) { _modulationStep = 0; + float sampleRate = engineGetSampleRate(); float rateX = params[RATE_X_PARAM].value; if (inputs[RATE_X_INPUT].active) { @@ -27,7 +28,8 @@ void Walk2::step() { } rateX *= rateX; rateX *= rateX; - _walkX.setParams(engineGetSampleRate(), rateX); + _walkX.setParams(sampleRate, rateX); + _slewX.setParams(sampleRate, std::max((1.0f - rateX) * 100.0f, 0.0f), 10.0f); float rateY = params[RATE_Y_PARAM].value; if (inputs[RATE_Y_INPUT].active) { @@ -35,7 +37,8 @@ void Walk2::step() { } rateY *= rateY; rateY *= rateY; - _walkY.setParams(engineGetSampleRate(), rateY); + _walkY.setParams(sampleRate, rateY); + _slewY.setParams(sampleRate, std::max((1.0f - rateY) * 100.0f, 0.0f), 10.0f); } if (_jumpTrigger.process(inputs[JUMP_INPUT].value)) { @@ -43,7 +46,7 @@ void Walk2::step() { _walkY.jump(); } - float outX = _walkX.next(); + float outX = _slewX.next(_walkX.next()); outX *= params[SCALE_X_PARAM].value; outX += params[OFFSET_X_PARAM].value * 5.0f; outputs[OUT_X_OUTPUT].value = outX; @@ -54,7 +57,7 @@ void Walk2::step() { } outputs[HOLD_X_OUTPUT].value = _holdX; - float outY = _walkY.next(); + float outY = _slewY.next(_walkY.next()); outY *= params[SCALE_Y_PARAM].value; outY += params[OFFSET_Y_PARAM].value * 5.0f; outputs[OUT_Y_OUTPUT].value = outY; diff --git a/src/Walk2.hpp b/src/Walk2.hpp @@ -3,6 +3,7 @@ #include "bogaudio.hpp" #include "dsp/buffer.hpp" #include "dsp/noise.hpp" +#include "dsp/signal.hpp" using namespace bogaudio::dsp; @@ -57,6 +58,7 @@ struct Walk2 : Module { Trigger _triggerX, _triggerY; RandomWalk _walkX, _walkY; + SlewLimiter _slewX, _slewY; Trigger _jumpTrigger; float _holdX = 0.0f, _holdY = 0.0f; HistoryBuffer<float> _outsX, _outsY, _holdsX, _holdsY;