From 6084053d60d2afb4de6a4e1448436fd13ab88493 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Fri, 26 Sep 2025 11:55:59 +0200 Subject: Implement SchroederReverb framework --- src/DSP/SchroederReverb.cpp | 27 +++++++++++++++++++++++++++ src/DSP/SchroederReverb.h | 16 ++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/DSP/SchroederReverb.cpp create mode 100644 src/DSP/SchroederReverb.h (limited to 'src/DSP') diff --git a/src/DSP/SchroederReverb.cpp b/src/DSP/SchroederReverb.cpp new file mode 100644 index 0000000..8bd764d --- /dev/null +++ b/src/DSP/SchroederReverb.cpp @@ -0,0 +1,27 @@ +#include "SchroederReverb.h" + +void SchroederReverb::prepare(double sampleRate, int samplesPerBlock) { + combFilter0.prepare(sampleRate, samplesPerBlock); + combFilter1.prepare(sampleRate, samplesPerBlock); + combFilter2.prepare(sampleRate, samplesPerBlock); + combFilter3.prepare(sampleRate, samplesPerBlock); + allPassFilter0.prepare(sampleRate, samplesPerBlock); + allPassFilter1.prepare(sampleRate, samplesPerBlock); +} + +void SchroederReverb::process(float *sample) { + float in0 = *sample; + float in1 = *sample; + float in2 = *sample; + float in3 = *sample; + + combFilter0.process(&in0); + combFilter1.process(&in1); + combFilter2.process(&in2); + combFilter3.process(&in3); + + float allPassIn = in0 + in1 + in2 + in3; + allPassFilter0.process(&allPassIn); + allPassFilter1.process(&allPassIn); + *sample = allPassIn; +} diff --git a/src/DSP/SchroederReverb.h b/src/DSP/SchroederReverb.h new file mode 100644 index 0000000..8c4567a --- /dev/null +++ b/src/DSP/SchroederReverb.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include "CombFilter.h" +#include "AllPassFilter.h" + +class SchroederReverb { +public: + void prepare(double sampleRate, int samplesPerBlock); + void reset(); + void process(float* sample); + +private: + CombFilter combFilter0, combFilter1, combFilter2, combFilter3; + AllPassFilter allPassFilter0, allPassFilter1; +}; -- cgit v1.2.3