From 43ea955190bce84da2c8f33ce0f47d4a106f5d49 Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Sun, 28 Sep 2014 18:11:44 -0700 Subject: [PATCH] Fixed my faulty vgmstream fade out routine --- Plugins/vgmstream/vgmstream/VGMDecoder.m | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Plugins/vgmstream/vgmstream/VGMDecoder.m b/Plugins/vgmstream/vgmstream/VGMDecoder.m index a69207af6..232ce11b2 100644 --- a/Plugins/vgmstream/vgmstream/VGMDecoder.m +++ b/Plugins/vgmstream/vgmstream/VGMDecoder.m @@ -167,11 +167,12 @@ err1: long fadeEnd = (framesRead + frames) > totalFrames ? totalFrames : (framesRead + frames); long fadePos; - int fadeScale = (int)((float)(totalFrames - fadeStart) / (float)framesFade * 65536.0f); - float fadeStep = (int)(1.0f / (float)framesFade * 65536.0f); + int64_t fadeScale = (int64_t)(totalFrames - fadeStart) * INT_MAX / framesFade; + int64_t fadeStep = INT_MAX / framesFade; + sbuf += (fadeStart - framesRead) * 2; for (fadePos = fadeStart; fadePos < fadeEnd; ++fadePos) { - sbuf[ 0 ] = sbuf[ 0 ] * fadeScale / 65536; - sbuf[ 1 ] = sbuf[ 1 ] * fadeScale / 65536; + sbuf[ 0 ] = (int16_t)((int64_t)(sbuf[ 0 ]) * fadeScale / INT_MAX); + sbuf[ 1 ] = (int16_t)((int64_t)(sbuf[ 1 ]) * fadeScale / INT_MAX); sbuf += 2; fadeScale -= fadeStep; if (fadeScale <= 0) break;