- refactored gain loop
- added setter for gain
This commit is contained in:
2025-11-09 21:25:45 +01:00
parent 6334c66df0
commit e481f5215e
+10 -10
View File
@@ -48,7 +48,6 @@ class Delay
m_buf.quer(out, m_delay_spec); m_buf.quer(out, m_delay_spec);
++m_buf; ++m_buf;
} }
}; };
template<typename T, size_t numCh> template<typename T, size_t numCh>
@@ -116,11 +115,13 @@ class Reverb
std::array<Diffusor<T, numCh>, 3> m_diffusors; std::array<Diffusor<T, numCh>, 3> m_diffusors;
Delay<T, numCh> m_feedbackDly; Delay<T, numCh> m_feedbackDly;
T fb_dly_out[numCh]; T fb_dly_out[numCh];
T fb_gain;
public: public:
Reverb(uint maxDelay) Reverb(uint maxDelay)
: m_diffusors({maxDelay, maxDelay, maxDelay}) : m_diffusors({maxDelay, maxDelay, maxDelay})
, m_feedbackDly(9600, 4800) , m_feedbackDly(9600, 4800)
, fb_gain(0)
{ {
for (int c=0; c < numCh; c++) for (int c=0; c < numCh; c++)
{ {
@@ -128,6 +129,11 @@ class Reverb
} }
} }
void setFeedbackGain(T value)
{
fb_gain = value;
}
void process_multi(float *in, float *out, unsigned numPoints) void process_multi(float *in, float *out, unsigned numPoints)
{ {
for (int i=0; i < numPoints; i++) for (int i=0; i < numPoints; i++)
@@ -138,22 +144,17 @@ class Reverb
{ {
diffusor.process_multi(temp); diffusor.process_multi(temp);
} }
// Sum // Sum
Householder<T, numCh>::inPlace(fb_dly_out);
for (int c=0; c < numCh; c++) for (int c=0; c < numCh; c++)
{ {
temp[c] += fb_dly_out[c]; temp[c] += fb_gain*fb_dly_out[c];
} }
m_feedbackDly.process(temp, fb_dly_out); m_feedbackDly.process(temp, fb_dly_out);
// Mix // Mix
out[i] = fb_dly_out[0]; out[i] = fb_dly_out[0];
T fb_gain = 0.85;
for (int c=0; c < numCh; c++)
{
fb_dly_out[c] *= fb_gain;
}
Householder<T, numCh>::inPlace(fb_dly_out);
} }
} }
@@ -169,7 +170,6 @@ class Reverb
out[i] = temp; out[i] = temp;
} }
} }
}; };
#endif #endif