summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2012-12-18 07:01:22 +0100
committerPierre Bourdon <delroth@gmail.com>2012-12-18 07:01:22 +0100
commit1cecbaedced4d8a44461f1eadda5d3b1949634c1 (patch)
treebd699ab0a00cdbd7e9b4d11eaeeaeb30736d5050 /Source/Core
parentfaaaa97c9e6cea7fa865312ce07a9c222983e50a (diff)
Fix MixAdd with volume. The previous volume formula completely failed with volumes >= 1.0 (0x8000). Fixes Tomb Raider Legends (GC) music.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h7
1 files changed, 5 insertions, 2 deletions
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 155965dfea..bf13c7114d 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
@@ -337,8 +337,11 @@ void MixAdd(int* out, const s16* input, u16* pvol, bool ramp)
for (u32 i = 0; i < 32; ++i)
{
- s64 sample = 2 * (s16)input[i] * (s16)volume;
- out[i] += (s32)(sample >> 16);
+ s64 sample = input[i];
+ sample *= volume;
+ sample >>= 15;
+
+ out[i] += (s32)sample;
volume += volume_delta;
}
}