From 53f4e32c46bc46fdce007f3c4d36932ce997bf4f Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Sat, 21 May 2016 11:45:55 -1000 Subject: [PATCH] Add channel-matrix slewing --- include/boo/audiodev/IAudioVoice.hpp | 4 +- lib/audiodev/AudioMatrix.cpp | 226 ++++++++++++++++++++++----- lib/audiodev/AudioMatrix.hpp | 39 +++-- lib/audiodev/AudioVoice.cpp | 16 +- lib/audiodev/AudioVoice.hpp | 8 +- 5 files changed, 227 insertions(+), 66 deletions(-) diff --git a/include/boo/audiodev/IAudioVoice.hpp b/include/boo/audiodev/IAudioVoice.hpp index ded59b8..f0e5b5e 100644 --- a/include/boo/audiodev/IAudioVoice.hpp +++ b/include/boo/audiodev/IAudioVoice.hpp @@ -63,10 +63,10 @@ struct IAudioVoice virtual void setDefaultMatrixCoefficients()=0; /** Set channel-gains for mono audio source (AudioChannel enum for array index) */ - virtual void setMonoMatrixCoefficients(const float coefs[8])=0; + virtual void setMonoMatrixCoefficients(const float coefs[8], bool slew)=0; /** Set channel-gains for stereo audio source (AudioChannel enum for array index) */ - virtual void setStereoMatrixCoefficients(const float coefs[8][2])=0; + virtual void setStereoMatrixCoefficients(const float coefs[8][2], bool slew)=0; /** Called by client to dynamically adjust the pitch of voices with dynamic pitch enabled */ virtual void setPitchRatio(double ratio, bool slew)=0; diff --git a/lib/audiodev/AudioMatrix.cpp b/lib/audiodev/AudioMatrix.cpp index 995ae49..e5a1598 100644 --- a/lib/audiodev/AudioMatrix.cpp +++ b/lib/audiodev/AudioMatrix.cpp @@ -7,6 +7,8 @@ namespace boo void AudioMatrixMono::setDefaultMatrixCoefficients(AudioChannelSet acSet) { + m_curSlewFrame = 0; + m_slewFrames = 0; memset(m_coefs, 0, sizeof(m_coefs)); switch (acSet) { @@ -24,58 +26,126 @@ void AudioMatrixMono::setDefaultMatrixCoefficients(AudioChannelSet acSet) } int16_t* AudioMatrixMono::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) { const ChannelMap& chmap = info.m_channelMap; for (size_t s=0 ; s