From 831dc631c8c9cecc249944cb4ef3f90303100cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Heres?= Date: Fri, 23 Oct 2015 12:40:35 +0200 Subject: [PATCH] Optimize Mixer::EffectPanS16 --- src/audio/mixer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/audio/mixer.cpp b/src/audio/mixer.cpp index 5e9df6fef2..0706f641c8 100644 --- a/src/audio/mixer.cpp +++ b/src/audio/mixer.cpp @@ -738,10 +738,17 @@ void Mixer::MixChannel(Channel& channel, uint8* data, int length) void Mixer::EffectPanS16(Channel& channel, sint16* data, int length) { + const float dt = 1 / (length * 2); + float left_volume = channel.oldvolume_l; + float right_volume = channel.oldvolume_r; + const float d_left = dt * channel.volume_l; + const float d_right = dt * channel.volume_r; + for (int i = 0; i < length * 2; i += 2) { - float t = (float)i / (length * 2); - data[i] = (sint16)(data[i] * ((1.0 - t) * channel.oldvolume_l + t * channel.volume_l)); - data[i + 1] = (sint16)(data[i + 1] * ((1.0 - t) * channel.oldvolume_r + t * channel.volume_r)); + data[i] = (sint16)(data[i] * left_volume); + data[i + 1] = (sint16)(data[i + 1] * right_volume); + left_volume += d_left; + right_volume += d_right; } }