From 796c40a0dac68bd2bc9ccd676ad714f2fd3872fc Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Mon, 6 Oct 2025 21:14:55 +0200 Subject: Add Decay --- src/DSP/CombFilter.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/DSP/CombFilter.cpp') diff --git a/src/DSP/CombFilter.cpp b/src/DSP/CombFilter.cpp index 0ee03fc..5ee8efc 100644 --- a/src/DSP/CombFilter.cpp +++ b/src/DSP/CombFilter.cpp @@ -1,7 +1,7 @@ #include "CombFilter.h" void -CombFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, float gain) +CombFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples) { int maxDelayTimeMs = 50; int maxDelaySamples = static_cast(sampleRate * maxDelayTimeMs / 1000.0); @@ -9,17 +9,19 @@ CombFilter::prepare(double sampleRate, int samplesPerBlock, int delayInSamples, delayBuffer.resize(maxDelaySamples, 0.0f); std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); delayBufferWritePos = 0; + this->sampleRate = sampleRate; this->delayInSamples = delayInSamples; - this->gain = gain; } void -CombFilter::process(float& sample) -{ +CombFilter::process(float& sample, float decayFactor) +{ int delayBufferLength = (int)delayBuffer.size(); int delayReadPos = (delayBufferWritePos - delayInSamples + delayBufferLength) % delayBufferLength; float delayedSample = delayBuffer[delayReadPos]; + + float gain = std::pow(10.0f, -3.0f * delayInSamples / (decayFactor * sampleRate)); delayBuffer[delayBufferWritePos] = sample + gain * delayedSample; sample = delayedSample; -- cgit v1.2.3