diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2012-12-18 07:01:22 +0100 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2012-12-18 07:01:22 +0100 |
| commit | 1cecbaedced4d8a44461f1eadda5d3b1949634c1 (patch) | |
| tree | bd699ab0a00cdbd7e9b4d11eaeeaeb30736d5050 /Source/Core | |
| parent | faaaa97c9e6cea7fa865312ce07a9c222983e50a (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.h | 7 |
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; } } |
