aboutsummaryrefslogtreecommitdiff
path: root/src/DSP/CombFilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSP/CombFilter.cpp')
-rw-r--r--src/DSP/CombFilter.cpp10
1 files changed, 6 insertions, 4 deletions
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<int>(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;