From 021cdac24c4753e303ee6a4357356ec116ff0a7b Mon Sep 17 00:00:00 2001 From: skidau Date: Thu, 6 Nov 2014 22:51:59 +1100 Subject: [PATCH] Ignore the emulated wiimotes speaker data if the sample rate is set at 0hz. Fixes issue 7806. --- Source/Core/Core/HW/WiimoteEmu/Speaker.cpp | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/Speaker.cpp b/Source/Core/Core/HW/WiimoteEmu/Speaker.cpp index 725fa25adb..cdabd41bd2 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Speaker.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Speaker.cpp @@ -109,19 +109,21 @@ void Wiimote::SpeakerData(wm_speaker_data* sd) unsigned int vol = (unsigned int)(m_options->settings[4]->GetValue() * 100); float amp = 10.0f; // Boost the speaker volume relative to the rest of the game audio - unsigned int sample_rate = sample_rate_dividend / Common::swap16(m_reg_speaker.sample_rate); - float speaker_volume_ratio = (float)m_reg_speaker.volume / volume_divisor; - unsigned int left_volume = (unsigned int)((128 + vol) * speaker_volume_ratio * amp); - unsigned int right_volume = (unsigned int)((128 - vol) * speaker_volume_ratio * amp); + if (m_reg_speaker.sample_rate) + { + unsigned int sample_rate = sample_rate_dividend / Common::swap16(m_reg_speaker.sample_rate); + float speaker_volume_ratio = (float)m_reg_speaker.volume / volume_divisor; + unsigned int left_volume = (unsigned int)((128 + vol) * speaker_volume_ratio * amp); + unsigned int right_volume = (unsigned int)((128 - vol) * speaker_volume_ratio * amp); - if (left_volume > 255) - left_volume = 255; - if (right_volume > 255) - right_volume = 255; - - g_sound_stream->GetMixer()->SetWiimoteSpeakerVolume(left_volume, right_volume); - g_sound_stream->GetMixer()->PushWiimoteSpeakerSamples(samples.get(), sd->length, sample_rate); + if (left_volume > 255) + left_volume = 255; + if (right_volume > 255) + right_volume = 255; + g_sound_stream->GetMixer()->SetWiimoteSpeakerVolume(left_volume, right_volume); + g_sound_stream->GetMixer()->PushWiimoteSpeakerSamples(samples.get(), sd->length, sample_rate); + } #ifdef WIIMOTE_SPEAKER_DUMP static int num = 0;