mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-08 21:53:31 +01:00
Merge pull request #639 from phire/fix-audio-issues
Fix audio issues since DTK merge.
This commit is contained in:
commit
ae65b3ba2c
@ -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;
|
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 );
|
const u32 ratio = (u32)( 65536.0f * aid_sample_rate / (float)m_mixer->m_sampleRate );
|
||||||
|
|
||||||
s32 lvolume = m_LVolume;
|
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 l1 = Common::swap16(m_buffer[indexR & INDEX_MASK]); //current
|
||||||
s16 l2 = Common::swap16(m_buffer[indexR2 & INDEX_MASK]); //next
|
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 = (sampleL * lvolume) >> 8;
|
||||||
sampleL += samples[currentSample + 1];
|
sampleL += samples[currentSample + 1];
|
||||||
MathUtil::Clamp(&sampleL, -32767, 32767);
|
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 r1 = Common::swap16(m_buffer[(indexR + 1) & INDEX_MASK]); //current
|
||||||
s16 r2 = Common::swap16(m_buffer[(indexR2 + 1) & INDEX_MASK]); //next
|
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 = (sampleR * rvolume) >> 8;
|
||||||
sampleR += samples[currentSample];
|
sampleR += samples[currentSample];
|
||||||
MathUtil::Clamp(&sampleR, -32767, 32767);
|
MathUtil::Clamp(&sampleR, -32767, 32767);
|
||||||
samples[currentSample] = sampleR;
|
samples[currentSample] = sampleR;
|
||||||
|
|
||||||
frac += ratio;
|
m_frac += ratio;
|
||||||
indexR += 2 * (u16)(frac >> 16);
|
indexR += 2 * (u16)(m_frac >> 16);
|
||||||
frac &= 0xffff;
|
m_frac &= 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Padding
|
// Padding
|
||||||
short s[2];
|
short s[2];
|
||||||
s[0] = Common::swap16(m_buffer[(indexR - 1) & INDEX_MASK]);
|
s[0] = Common::swap16(m_buffer[(indexR - 1) & INDEX_MASK]);
|
||||||
s[1] = Common::swap16(m_buffer[(indexR - 2) & INDEX_MASK]);
|
s[1] = Common::swap16(m_buffer[(indexR - 2) & INDEX_MASK]);
|
||||||
s[0] = (s[0] * lvolume) >> 8;
|
s[0] = (s[0] * rvolume) >> 8;
|
||||||
s[1] = (s[1] * rvolume) >> 8;
|
s[1] = (s[1] * lvolume) >> 8;
|
||||||
for (; currentSample < numSamples * 2; currentSample += 2)
|
for (; currentSample < numSamples * 2; currentSample += 2)
|
||||||
{
|
{
|
||||||
int sampleR = s[0] + samples[currentSample];
|
int sampleR = s[0] + samples[currentSample];
|
||||||
|
@ -91,6 +91,7 @@ protected:
|
|||||||
, m_LVolume(256)
|
, m_LVolume(256)
|
||||||
, m_RVolume(256)
|
, m_RVolume(256)
|
||||||
, m_numLeftI(0.0f)
|
, m_numLeftI(0.0f)
|
||||||
|
, m_frac(0)
|
||||||
{
|
{
|
||||||
memset(m_buffer, 0, sizeof(m_buffer));
|
memset(m_buffer, 0, sizeof(m_buffer));
|
||||||
}
|
}
|
||||||
@ -107,6 +108,7 @@ protected:
|
|||||||
volatile s32 m_LVolume;
|
volatile s32 m_LVolume;
|
||||||
volatile s32 m_RVolume;
|
volatile s32 m_RVolume;
|
||||||
float m_numLeftI;
|
float m_numLeftI;
|
||||||
|
u32 m_frac;
|
||||||
};
|
};
|
||||||
MixerFifo m_dma_mixer;
|
MixerFifo m_dma_mixer;
|
||||||
MixerFifo m_streaming_mixer;
|
MixerFifo m_streaming_mixer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user