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