mirror of
https://github.com/ShaYmez/xlxd.git
synced 2025-06-15 12:02:26 -04:00
Better FIR Filter implementation, correct sample collecting
This commit is contained in:
parent
4ba6a77ecc
commit
ee1b97a165
@ -34,7 +34,7 @@ CFIRFilter::CFIRFilter(const float* taps, int tapsLength)
|
|||||||
|
|
||||||
::memcpy(m_taps, taps, tapsLength * sizeof(float));
|
::memcpy(m_taps, taps, tapsLength * sizeof(float));
|
||||||
::memset(m_buffer, 0, tapsLength * sizeof(float));
|
::memset(m_buffer, 0, tapsLength * sizeof(float));
|
||||||
m_currentBufferPosition = m_tapsLength -1;
|
m_currentBufferPosition = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFIRFilter::~CFIRFilter()
|
CFIRFilter::~CFIRFilter()
|
||||||
@ -45,23 +45,30 @@ CFIRFilter::~CFIRFilter()
|
|||||||
|
|
||||||
inline float CFIRFilter::Process(float inputSample)
|
inline float CFIRFilter::Process(float inputSample)
|
||||||
{
|
{
|
||||||
// Buffer latest sample
|
float output = 0.0f;
|
||||||
|
int iTaps = 0;
|
||||||
|
|
||||||
|
// Buffer latest sample into delay line
|
||||||
m_buffer[m_currentBufferPosition] = inputSample;
|
m_buffer[m_currentBufferPosition] = inputSample;
|
||||||
|
|
||||||
float outputSample = 0.0f;
|
for(int i = m_currentBufferPosition; i >= 0; i--)
|
||||||
for(int i = 0; i < m_tapsLength; i++)
|
|
||||||
{
|
{
|
||||||
outputSample += m_taps[i] * m_buffer[(m_currentBufferPosition + i) % m_tapsLength];
|
output += m_taps[iTaps++] * m_buffer[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
m_currentBufferPosition = MAX(0, m_currentBufferPosition - 1);
|
for(int i = m_tapsLength - 1; i > m_currentBufferPosition; i--)
|
||||||
|
{
|
||||||
|
output += m_taps[iTaps++] * m_buffer[i];
|
||||||
|
}
|
||||||
|
|
||||||
return outputSample;
|
m_currentBufferPosition = (m_currentBufferPosition + 1) % m_tapsLength;
|
||||||
|
|
||||||
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFIRFilter::Process(uint8* voice, int length)
|
void CFIRFilter::Process(uint8* voice, int length)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < length; i++)
|
for(int i = 0; i < length; i+=2)
|
||||||
{
|
{
|
||||||
//Get the sample
|
//Get the sample
|
||||||
float input = (float)(short)MAKEWORD(voice[i+1], voice[i]);
|
float input = (float)(short)MAKEWORD(voice[i+1], voice[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user