diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2012-12-19 05:56:57 +0100 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2012-12-19 05:56:57 +0100 |
| commit | 071b27f0bb248069cfb38f4da7cecee2015a60ad (patch) | |
| tree | 612842c2a4899a647fccf1a614023b0de1b65a52 /Source/Core | |
| parent | 2c10ca4e46e18696b39798b00866de3a29e09272 (diff) | |
Fix volume mixing in DownloadAndMixWithVolume (same issue with >1.0 volumes)
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp | 7 |
1 files 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); } } } |
