From 960adde7e467d2a0c0ee541ed4ee2ec2219221e4 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Sun, 28 Sep 2025 13:58:50 +0200 Subject: Tune filters and get reverb to work --- src/DSP/AllPassFilter.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/DSP/AllPassFilter.cpp') diff --git a/src/DSP/AllPassFilter.cpp b/src/DSP/AllPassFilter.cpp index e90bff7..a6e3908 100644 --- a/src/DSP/AllPassFilter.cpp +++ b/src/DSP/AllPassFilter.cpp @@ -1,24 +1,30 @@ #include "AllPassFilter.h" -void AllPassFilter::prepare(double sampleRate, int samplesPerBlock) { +void AllPassFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) { int maxDelayTimeMs = 100; int maxDelaySamples = static_cast(sampleRate * maxDelayTimeMs / 1000.0); delayBuffer.resize(maxDelaySamples, 0.0f); - delayInSamples = static_cast(sampleRate * 0.02); + //delayInSamples = static_cast(sampleRate * delayInSeconds); delayBufferWritePos = 0; + this->delayInSamples_ = delayInSamples; + this->gain = gain; } void AllPassFilter::process(float* sample) { int delayBufferLength = (int)delayBuffer.size(); int delayReadPos = - (delayBufferWritePos - delayInSamples + delayBufferLength) % + (delayBufferWritePos - delayInSamples_ + delayBufferLength) % delayBufferLength; - float xn = *sample; + + float delayedSample = delayBuffer[delayReadPos]; + float xn = *sample; + + float bufferInput = xn + gain * delayedSample; float yn = -gain * xn + delayedSample; - delayBuffer[delayBufferWritePos] = xn + gain * yn; + delayBuffer[delayBufferWritePos] = bufferInput; *sample = yn; delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; } -- cgit v1.2.3