From 1cecbaedced4d8a44461f1eadda5d3b1949634c1 Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Tue, 18 Dec 2012 07:01:22 +0100 Subject: [PATCH] Fix MixAdd with volume. The previous volume formula completely failed with volumes >= 1.0 (0x8000). Fixes Tomb Raider Legends (GC) music. --- Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX_Voice.h | 7 +++++-- 1 file 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; } }