added early reflections
This commit is contained in:
+21
-3
@@ -5,15 +5,18 @@
|
||||
#include <common/mix.hpp>
|
||||
#include <initializer_list>
|
||||
#include <sys/types.h>
|
||||
#include <vector>
|
||||
#include "diffusor.hpp"
|
||||
|
||||
|
||||
|
||||
|
||||
template<typename T, uint numCh>
|
||||
class Reverb
|
||||
{
|
||||
std::vector<Diffusor<T, numCh>> m_diffusors;
|
||||
MultiDelay<T, numCh> m_feedbackDly;
|
||||
|
||||
std::vector<T> m_earlyGain;
|
||||
T fb_dly_out[numCh];
|
||||
T fb_gain;
|
||||
|
||||
@@ -21,6 +24,7 @@ class Reverb
|
||||
Reverb(std::initializer_list<Diffusor<T, numCh>> 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<T, numCh>::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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user