diff options
| author | Dolphin Bot <dolphin-emu-bot@users.noreply.github.com> | 2014-07-17 10:13:06 +0200 |
|---|---|---|
| committer | Dolphin Bot <dolphin-emu-bot@users.noreply.github.com> | 2014-07-17 10:13:06 +0200 |
| commit | ae65b3ba2c2ced70b3a04b392ebbd7ad2ccb0784 (patch) | |
| tree | 7fbadd1adbed866169e66850f5512209fc24e3a0 /Source/Core | |
| parent | 11a0f5ddc5d77a3fcf409ac7e3246e5cc30de16a (diff) | |
| parent | 48afab2685e3ce1a0e3ae7c21932fe3834c86482 (diff) | |
Merge pull request #639 from phire/fix-audio-issues
Fix audio issues since DTK merge.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/AudioCommon/Mixer.cpp | 15 | ||||
| -rw-r--r-- | Source/Core/AudioCommon/Mixer.h | 2 |
2 files changed, 9 insertions, 8 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp index 388eb56b0d..ce13f50689 100644 --- a/Source/Core/AudioCommon/Mixer.cpp +++ b/Source/Core/AudioCommon/Mixer.cpp @@ -51,7 +51,6 @@ unsigned int CMixer::MixerFifo::Mix(short* samples, unsigned int numSamples, boo aid_sample_rate = aid_sample_rate * (framelimit - 1) * 5 / VideoInterface::TargetRefreshRate; } - static u32 frac = 0; const u32 ratio = (u32)( 65536.0f * aid_sample_rate / (float)m_mixer->m_sampleRate ); s32 lvolume = m_LVolume; @@ -63,7 +62,7 @@ unsigned int CMixer::MixerFifo::Mix(short* samples, unsigned int numSamples, boo s16 l1 = Common::swap16(m_buffer[indexR & INDEX_MASK]); //current s16 l2 = Common::swap16(m_buffer[indexR2 & INDEX_MASK]); //next - int sampleL = ((l1 << 16) + (l2 - l1) * (u16)frac) >> 16; + int sampleL = ((l1 << 16) + (l2 - l1) * (u16)m_frac) >> 16; sampleL = (sampleL * lvolume) >> 8; sampleL += samples[currentSample + 1]; MathUtil::Clamp(&sampleL, -32767, 32767); @@ -71,23 +70,23 @@ unsigned int CMixer::MixerFifo::Mix(short* samples, unsigned int numSamples, boo s16 r1 = Common::swap16(m_buffer[(indexR + 1) & INDEX_MASK]); //current s16 r2 = Common::swap16(m_buffer[(indexR2 + 1) & INDEX_MASK]); //next - int sampleR = ((r1 << 16) + (r2 - r1) * (u16)frac) >> 16; + int sampleR = ((r1 << 16) + (r2 - r1) * (u16)m_frac) >> 16; sampleR = (sampleR * rvolume) >> 8; sampleR += samples[currentSample]; MathUtil::Clamp(&sampleR, -32767, 32767); samples[currentSample] = sampleR; - frac += ratio; - indexR += 2 * (u16)(frac >> 16); - frac &= 0xffff; + m_frac += ratio; + indexR += 2 * (u16)(m_frac >> 16); + m_frac &= 0xffff; } // Padding short s[2]; s[0] = Common::swap16(m_buffer[(indexR - 1) & INDEX_MASK]); s[1] = Common::swap16(m_buffer[(indexR - 2) & INDEX_MASK]); - s[0] = (s[0] * lvolume) >> 8; - s[1] = (s[1] * rvolume) >> 8; + s[0] = (s[0] * rvolume) >> 8; + s[1] = (s[1] * lvolume) >> 8; for (; currentSample < numSamples * 2; currentSample += 2) { int sampleR = s[0] + samples[currentSample]; diff --git a/Source/Core/AudioCommon/Mixer.h b/Source/Core/AudioCommon/Mixer.h index d1096b2eb0..474ec128bb 100644 --- a/Source/Core/AudioCommon/Mixer.h +++ b/Source/Core/AudioCommon/Mixer.h @@ -91,6 +91,7 @@ protected: , m_LVolume(256) , m_RVolume(256) , m_numLeftI(0.0f) + , m_frac(0) { memset(m_buffer, 0, sizeof(m_buffer)); } @@ -107,6 +108,7 @@ protected: volatile s32 m_LVolume; volatile s32 m_RVolume; float m_numLeftI; + u32 m_frac; }; MixerFifo m_dma_mixer; MixerFifo m_streaming_mixer; |
