From b9b7077c4d68d1ea17d5d7203177ae5efe0f7e30 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 16 Nov 2025 10:16:55 +0100 Subject: [PATCH] added early reflections --- reverb/reverb.hpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/reverb/reverb.hpp b/reverb/reverb.hpp index 9895c60..c9a52df 100644 --- a/reverb/reverb.hpp +++ b/reverb/reverb.hpp @@ -5,15 +5,18 @@ #include #include #include +#include #include "diffusor.hpp" + + template class Reverb { std::vector> m_diffusors; MultiDelay m_feedbackDly; - + std::vector m_earlyGain; T fb_dly_out[numCh]; T fb_gain; @@ -21,6 +24,7 @@ class Reverb Reverb(std::initializer_list> maxDelay, uint fb_maxDelay, uint fb_minDelay) : m_diffusors(maxDelay) , m_feedbackDly(fb_maxDelay, fb_minDelay) + , m_earlyGain(maxDelay.size()) , fb_gain(0) { for (int c=0; c < numCh; c++) @@ -34,7 +38,7 @@ class Reverb return m_diffusors.size(); } - void setDelay(uint delay, uint index) + void setDelay(uint index, uint delay) { m_diffusors[index].setDelay(delay); } @@ -54,6 +58,16 @@ class Reverb return fb_gain; } + void setEarlyGain(uint index, T gain) + { + m_earlyGain[index] = gain; + } + + T getEarlyGain(uint index) + { + return m_earlyGain[index]; + } + void setFeedbackDelay(uint delay_min, uint delay_max) { m_feedbackDly.setDelay(delay_max, delay_min); @@ -65,9 +79,13 @@ class Reverb { T temp[numCh]; Mix::split(in[i], temp); + T earlySum = 0; + int k=0; for (auto diffusor: m_diffusors) { diffusor.process_multi(temp); + earlySum += m_earlyGain[k]*temp[0]; + k++; } // Sum @@ -81,7 +99,7 @@ class Reverb // Mix for (int c=0; c < numCh; c++) { - out[i] = temp[0]; + out[i] = temp[0] + earlySum; } } }