diff options
| author | Dominik Kaiser | 2025-10-06 21:15:10 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2025-10-06 21:15:10 +0200 |
| commit | c52f9a8babfffef1413df3e03dc6f16d5ffa2c85 (patch) | |
| tree | 4c2202b370c4c2d944de3b7af03721bcb5933110 /src/DSP/Delay.cpp | |
| parent | 796c40a0dac68bd2bc9ccd676ad714f2fd3872fc (diff) | |
| download | SchroederReverb-c52f9a8babfffef1413df3e03dc6f16d5ffa2c85.tar.gz SchroederReverb-c52f9a8babfffef1413df3e03dc6f16d5ffa2c85.zip | |
Add Pre-Delay
Diffstat (limited to 'src/DSP/Delay.cpp')
| -rw-r--r-- | src/DSP/Delay.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/DSP/Delay.cpp b/src/DSP/Delay.cpp new file mode 100644 index 0000000..50c310a --- /dev/null +++ b/src/DSP/Delay.cpp @@ -0,0 +1,37 @@ +#include "Delay.h" + +void +Delay::prepare(double sampleRate, int samplesPerBlock) +{ + int maxDelayTimeMs = 2000; + int maxDelaySamples = static_cast<int>(sampleRate * maxDelayTimeMs / 1000.0); + + delayBuffer.resize(maxDelaySamples, 0.0f); + std::fill(delayBuffer.begin(), delayBuffer.end(), 0.0f); + delayBufferWritePos = 0; + this->sampleRate = sampleRate; +} + +void +Delay::process(float& sample) +{ + if (delayInSamples == 0) + { + return; + } + int delayBufferLength = (int)delayBuffer.size(); + int delayReadPos + = (delayBufferWritePos - delayInSamples + delayBufferLength) % delayBufferLength; + float delayedSample = delayBuffer[delayReadPos]; + + delayBuffer[delayBufferWritePos] = sample; + sample = delayedSample; + + delayBufferWritePos = (delayBufferWritePos + 1) % delayBufferLength; +} + +void +Delay::setDelayMs(float ms) +{ + delayInSamples = static_cast<int>(sampleRate * (ms / 1000.0f)); +} |
