diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h index bf5e4d9b6b..1d35ed797a 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h @@ -100,12 +100,17 @@ inline bool WritePB(u32 addr, AXPBWii &PB) template inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, - int _iSize) + int _iSize, bool resample = true) { if (pb.running) { - const u32 ratio = (u32)(((pb.src.ratio_hi << 16) + pb.src.ratio_lo) - * /*ratioFactor:*/((float)AudioInterface::GetAIDSampleRate() / (float)soundStream->GetMixer()->GetSampleRate())); + float ratioFactor; + if (resample) + ratioFactor = (float)AudioInterface::GetAIDSampleRate() / (float)soundStream->GetMixer()->GetSampleRate(); + else + ratioFactor = 1.0; + + const u32 ratio = (u32)(((pb.src.ratio_hi << 16) + pb.src.ratio_lo) * ratioFactor); u32 sampleEnd = (pb.audio_addr.end_addr_hi << 16) | pb.audio_addr.end_addr_lo; u32 loopPos = (pb.audio_addr.loop_addr_hi << 16) | pb.audio_addr.loop_addr_lo; diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAX.cpp index ea9dd57e3c..7df82287f7 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_NewAX.cpp @@ -263,7 +263,7 @@ void CUCode_NewAX::ProcessPBList(u32 pb_addr) VoiceHacks(pb); MixAddVoice(pb, m_samples_left + spms * curr_ms, - m_samples_right + spms * curr_ms, spms); + m_samples_right + spms * curr_ms, spms, false); } WritePB(pb_addr, pb);