Add channel-matrix slewing

This commit is contained in:
Jack Andersen
2016-05-21 11:45:55 -10:00
parent e48f5d36c7
commit 53f4e32c46
5 changed files with 227 additions and 66 deletions

View File

@@ -39,47 +39,66 @@ static inline float ClampFlt(float in)
class AudioMatrixMono
{
float m_coefs[8];
float m_coefs[8] = {};
float m_oldCoefs[8] = {};
size_t m_slewFrames = 0;
size_t m_curSlewFrame = 0;
public:
AudioMatrixMono() {setDefaultMatrixCoefficients(AudioChannelSet::Stereo);}
void setDefaultMatrixCoefficients(AudioChannelSet acSet);
void setMatrixCoefficients(const float coefs[8])
void setMatrixCoefficients(const float coefs[8], size_t slewFrames=0)
{
m_slewFrames = slewFrames;
m_curSlewFrame = 0;
for (int i=0 ; i<8 ; ++i)
{
if (m_curSlewFrame == m_slewFrames)
m_oldCoefs[i] = m_coefs[i];
m_coefs[i] = coefs[i];
}
}
int16_t* mixMonoSampleData(const AudioVoiceEngineMixInfo& info,
const int16_t* dataIn, int16_t* dataOut, size_t samples) const;
const int16_t* dataIn, int16_t* dataOut, size_t samples);
int32_t* mixMonoSampleData(const AudioVoiceEngineMixInfo& info,
const int32_t* dataIn, int32_t* dataOut, size_t samples) const;
const int32_t* dataIn, int32_t* dataOut, size_t samples);
float* mixMonoSampleData(const AudioVoiceEngineMixInfo& info,
const float* dataIn, float* dataOut, size_t samples) const;
const float* dataIn, float* dataOut, size_t samples);
};
class AudioMatrixStereo
{
float m_coefs[8][2];
float m_coefs[8][2] = {};
float m_oldCoefs[8][2] = {};
size_t m_slewFrames = 0;
size_t m_curSlewFrame = 0;
public:
AudioMatrixStereo() {setDefaultMatrixCoefficients(AudioChannelSet::Stereo);}
void setDefaultMatrixCoefficients(AudioChannelSet acSet);
void setMatrixCoefficients(const float coefs[8][2])
void setMatrixCoefficients(const float coefs[8][2], size_t slewFrames=0)
{
m_slewFrames = slewFrames;
m_curSlewFrame = 0;
for (int i=0 ; i<8 ; ++i)
{
if (m_curSlewFrame == m_slewFrames)
{
m_oldCoefs[i][0] = m_coefs[i][0];
m_oldCoefs[i][1] = m_coefs[i][1];
}
m_coefs[i][0] = coefs[i][0];
m_coefs[i][1] = coefs[i][1];
}
}
int16_t* mixStereoSampleData(const AudioVoiceEngineMixInfo& info,
const int16_t* dataIn, int16_t* dataOut, size_t frames) const;
const int16_t* dataIn, int16_t* dataOut, size_t frames);
int32_t* mixStereoSampleData(const AudioVoiceEngineMixInfo& info,
const int32_t* dataIn, int32_t* dataOut, size_t frames) const;
const int32_t* dataIn, int32_t* dataOut, size_t frames);
float* mixStereoSampleData(const AudioVoiceEngineMixInfo& info,
const float* dataIn, float* dataOut, size_t frames) const;
const float* dataIn, float* dataOut, size_t frames);
};
}