BogaudioModules

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

commit 22df3b7e1afbe03176536209bd51905127c974f4
parent e281c970770c2c2ddb8880059caf323c4d195012
Author: Matt Demanett <matt@demanett.net>
Date:   Sat,  6 Jun 2020 22:51:57 -0400

WALK, WALK2: fix stall at low rates when the sample rate is above 48k; fix them to seem to walk at the same rate regardless of sample rate. #120

Diffstat:
Msrc/Test.cpp | 5+++--
Msrc/Test.hpp | 4++--
Msrc/dsp/filters/filter.cpp | 6+++---
Msrc/dsp/filters/filter.hpp | 2+-
Msrc/dsp/noise.cpp | 2+-
5 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/Test.cpp b/src/Test.cpp @@ -13,9 +13,10 @@ void Test::processChannel(const ProcessArgs& args, int _c) { if (!inputs[IN_INPUT].isConnected()) { return; } + float sr = APP->engine->getSampleRate(); _lpf.setParams( - APP->engine->getSampleRate(), - 10000.0 * clamp(params[PARAM1_PARAM].getValue(), 0.0f, 1.0f), + sr, + 0.49f * sr * clamp(params[PARAM1_PARAM].getValue(), 0.0f, 1.0f), std::max(10.0 * clamp(params[PARAM2_PARAM].getValue(), 0.0f, 1.0f), 0.1) ); outputs[OUT_OUTPUT].setVoltage(_lpf.next(inputs[IN_INPUT].getVoltage())); diff --git a/src/Test.hpp b/src/Test.hpp @@ -4,7 +4,7 @@ extern Model* modelTest; -// #define LPF 1 +#define LPF 1 // #define LPFNOISE 1 // #define SINE 1 // #define SQUARE 1 @@ -29,7 +29,7 @@ extern Model* modelTest; // #define SATURATOR 1 // #define BROWNIAN 1 // #define RANDOMWALK 1 -#define DCBLOCKER 1 +// #define DCBLOCKER 1 #include "pitch.hpp" #ifdef LPF diff --git a/src/dsp/filters/filter.cpp b/src/dsp/filters/filter.cpp @@ -15,9 +15,9 @@ void LowPassFilter::setParams(float sampleRate, float cutoff, float q) { _q = q; // printf("\nLPF set param: sr=%f c=%f q=%f\n", _sampleRate, _cutoff, _q); - float w0 = 2.0 * M_PI * _cutoff / _sampleRate; - float cosw0 = cosf(w0); - float alpha = sinf(w0) / (2.0 * _q); + double w0 = 2.0 * M_PI * (double)(_cutoff / _sampleRate); + double cosw0 = cos(w0); + double alpha = sin(w0) / (2.0 * _q); _biquad.setParams( (1.0 - cosw0) / 2.0, diff --git a/src/dsp/filters/filter.hpp b/src/dsp/filters/filter.hpp @@ -60,7 +60,7 @@ struct LowPassFilter : Filter { float _cutoff = 0.0f; float _q = 0.0f; - BiquadFilter<float> _biquad; + BiquadFilter<double> _biquad; // double is necessary here to make low cutoffs work at high sample rates. LowPassFilter(float sampleRate = 1000.0f, float cutoff = 100.0f, float q = 0.001f) { setParams(sampleRate, cutoff, q); diff --git a/src/dsp/noise.cpp b/src/dsp/noise.cpp @@ -30,7 +30,7 @@ void RandomWalk::setParams(float sampleRate, float change) { assert(change >= 0.0f); assert(change <= 1.0f); - _filter.setParams(sampleRate, std::max(2.0f, change * 0.49f * sampleRate)); + _filter.setParams(sampleRate, std::max(2.0f, change * 0.49f * std::min(44100.0f, sampleRate))); const float maxDamp = 0.98; const float minDamp = 0.9999;