summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2012-12-19 05:56:57 +0100
committerPierre Bourdon <delroth@gmail.com>2012-12-19 05:56:57 +0100
commit071b27f0bb248069cfb38f4da7cecee2015a60ad (patch)
tree612842c2a4899a647fccf1a614023b0de1b65a52 /Source/Core
parent2c10ca4e46e18696b39798b00866de3a29e09272 (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.cpp7
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);
}
}
}