summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2014-10-19 21:20:33 +1100
committerskidau <skidau@gmail.com>2014-10-19 21:20:33 +1100
commit990697bcbbcbb0a8809ab5ced864e67675dac97b (patch)
treef498894a2200ac9db3556c666853d46bddf2a3fa
parent033a3494449fa9489580c502e70f77a9d3492ab1 (diff)
Clamp the AX Volume to prevent clipping. Patch by hk.konpie. Fixes issue 7519.
-rw-r--r--Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
index 4dea13a075..f6ef24b1c8 100644
--- a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
+++ b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
@@ -430,6 +430,7 @@ void MixAdd(int* out, const s16* input, u32 count, u16* pvol, s16* dpop, bool ra
s64 sample = input[i];
sample *= volume;
sample >>= 15;
+ sample = MathUtil::Clamp((s32)sample, -32767, 32767); // -32768 ?
out[i] += (s16)sample;
volume += volume_delta;
@@ -462,7 +463,7 @@ void ProcessVoice(PB_TYPE& pb, const AXBuffers& buffers, u16 count, AXMixControl
// Apply a global volume ramp using the volume envelope parameters.
for (u32 i = 0; i < count; ++i)
{
- samples[i] = ((s32)samples[i] * pb.vol_env.cur_volume) >> 15;
+ samples[i] = MathUtil::Clamp(((s32)samples[i] * pb.vol_env.cur_volume) >> 15, -32767, 32767); // -32768 ?
pb.vol_env.cur_volume += pb.vol_env.cur_volume_delta;
}