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