AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

commit 42a7df9d7db8f0384d7a005acd9c080b1e03cb5d
parent a46656b00b5705530b4ba75e6228a3f114fc2dc0
Author: jatinchowdhury18 <jatinchowdhury18@gmail.com>
Date:   Mon,  6 Feb 2023 21:34:27 -0800

WowFlutter: Use SVF instead of IIR LPF for Ornstein-Uhlenbeck process (#303)


Diffstat:
MPlugin/Source/Processors/Timing_Effects/OHProcess.h | 16++++++----------
MPlugin/Source/Processors/Timing_Effects/WowFlutterProcessor.h | 2+-
2 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/Plugin/Source/Processors/Timing_Effects/OHProcess.h b/Plugin/Source/Processors/Timing_Effects/OHProcess.h @@ -22,12 +22,9 @@ public: noiseGen.setGainLinear (1.0f / 2.33f); noiseGen.prepare (monoSpec); - lpf.resize ((size_t) numChannels); - for (auto& filt : lpf) - { - filt.prepare (spec); - filt.coefficients = dsp::IIR::Coefficients<float>::makeLowPass (sampleRate, 10.0f); - } + lpf.prepare (spec); + lpf.setCutoffFrequency (10.0f); + lpf.reset(); noiseBuffer.setSize (1, samplesPerBlock); rPtr = noiseBuffer.getReadPointer (0); @@ -35,8 +32,7 @@ public: sqrtdelta = 1.0f / std::sqrt ((float) sampleRate); T = 1.0f / (float) sampleRate; - y.resize ((size_t) numChannels, 0.0f); - y[0] = 1.0f; + y.resize ((size_t) numChannels, 1.0f); } void prepareBlock (float amtParam, int numSamples) @@ -57,7 +53,7 @@ public: { y[ch] += sqrtdelta * rPtr[n] * amt; y[ch] += damping * (mean - y[ch]) * T; - return lpf[ch].processSample (y[ch]); + return lpf.processSample (y[ch], (int) ch); } private: @@ -73,7 +69,7 @@ private: AudioBuffer<float> noiseBuffer; const float* rPtr = nullptr; - std::vector<dsp::IIR::Filter<float>> lpf; + chowdsp::SVFLowpass<float> lpf; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OHProcess) }; diff --git a/Plugin/Source/Processors/Timing_Effects/WowFlutterProcessor.h b/Plugin/Source/Processors/Timing_Effects/WowFlutterProcessor.h @@ -41,7 +41,7 @@ private: HISTORY_SIZE = 1 << 21, }; - dsp::DelayLine<float, dsp::DelayLineInterpolationTypes::Lagrange3rd> delay { HISTORY_SIZE }; + chowdsp::DelayLine<float, chowdsp::DelayLineInterpolationTypes::Lagrange3rd> delay { HISTORY_SIZE }; std::vector<DCBlocker> dcBlocker; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WowFlutterProcessor)