From 071b27f0bb248069cfb38f4da7cecee2015a60ad Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Wed, 19 Dec 2012 05:56:57 +0100 Subject: [PATCH] Fix volume mixing in DownloadAndMixWithVolume (same issue with >1.0 volumes) --- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp index 0ad33870db..57032a774e 100644 --- a/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp +++ b/Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp @@ -362,14 +362,15 @@ void CUCode_AX::DownloadAndMixWithVolume(u32 addr, u16 vol_main, u16 vol_auxa, u for (u32 i = 0; i < 3; ++i) { int* ptr = (int*)HLEMemory_Get_Pointer(addr); - s16 volume = (s16)volumes[i]; + u16 volume = volumes[i]; for (u32 j = 0; j < 3; ++j) { int* buffer = buffers[i][j]; for (u32 k = 0; k < 5 * 32; ++k) { - s64 sample = 2 * (s32)Common::swap32(*ptr++) * volume; - buffer[k] += (s32)(sample >> 16); + s64 sample = (s64)(s32)Common::swap32(*ptr++); + sample *= volume; + buffer[k] += (s32)(sample >> 15); } } }