From 10316cfd066b4d341dfef1328886c3cdc44733ea Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Mon, 2 Jun 2014 13:28:20 -0700 Subject: [PATCH] Cleaned up ft2play loop handling and fixed bidirectional loops --- Frameworks/modplay/modplay/ft2play.c | 50 ++++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Frameworks/modplay/modplay/ft2play.c b/Frameworks/modplay/modplay/ft2play.c index 532af0b8b..f23584e4a 100644 --- a/Frameworks/modplay/modplay/ft2play.c +++ b/Frameworks/modplay/modplay/ft2play.c @@ -2927,25 +2927,25 @@ static inline void mix8b(PLAYER *p, uint32_t ch, uint32_t samples) { if (loopDir == 1) { - if (samplePosition <= sampleLoopBegin) + if (samplePosition < sampleLoopBegin) { - samplePosition = sampleLoopBegin + (sampleLoopBegin - samplePosition); + samplePosition = sampleLoopBegin; loopDir = 0; } } else { - if (samplePosition >= sampleLoopEnd) + if (samplePosition == sampleLoopEnd) { - samplePosition = sampleLoopEnd - (samplePosition - sampleLoopEnd); + samplePosition = sampleLoopEnd - 1; loopDir = 1; } } } else { - if (samplePosition >= sampleLoopEnd) - samplePosition = sampleLoopBegin + (samplePosition - sampleLoopEnd); + if (samplePosition == sampleLoopEnd) + samplePosition = sampleLoopBegin; } } else if ((samplePosition < 0) || (samplePosition >= sampleLength)) @@ -3092,25 +3092,25 @@ static inline void mix8bstereo(PLAYER *p, uint32_t ch, uint32_t samples) { if (loopDir == 1) { - if (samplePosition <= sampleLoopBegin) + if (samplePosition < sampleLoopBegin) { - samplePosition = sampleLoopBegin + (sampleLoopBegin - samplePosition); + samplePosition = sampleLoopBegin; loopDir = 0; } } else { - if (samplePosition >= sampleLoopEnd) + if (samplePosition == sampleLoopEnd) { - samplePosition = sampleLoopEnd - (samplePosition - sampleLoopEnd); + samplePosition = sampleLoopEnd - 1; loopDir = 1; } } } else { - if (samplePosition >= sampleLoopEnd) - samplePosition = sampleLoopBegin + (samplePosition - sampleLoopEnd); + if (samplePosition == sampleLoopEnd) + samplePosition = sampleLoopBegin; } } else if ((samplePosition < 0) || (samplePosition >= sampleLength)) @@ -3254,25 +3254,25 @@ static inline void mix16b(PLAYER *p, uint32_t ch, uint32_t samples) { if (loopDir == 1) { - if (samplePosition <= sampleLoopBegin) + if (samplePosition < sampleLoopBegin) { - samplePosition = sampleLoopBegin + (sampleLoopBegin - samplePosition); + samplePosition = sampleLoopBegin; loopDir = 0; } } else { - if (samplePosition >= sampleLoopEnd) + if (samplePosition == sampleLoopEnd) { - samplePosition = sampleLoopEnd - (samplePosition - sampleLoopEnd); + samplePosition = sampleLoopEnd - 1; loopDir = 1; } } } else { - if (samplePosition >= sampleLoopEnd) - samplePosition = sampleLoopBegin + (samplePosition - sampleLoopEnd); + if (samplePosition == sampleLoopEnd) + samplePosition = sampleLoopBegin; } } else if ((samplePosition < 0) || (samplePosition >= sampleLength)) @@ -3419,25 +3419,25 @@ static inline void mix16bstereo(PLAYER *p, uint32_t ch, uint32_t samples) { if (loopDir == 1) { - if (samplePosition <= sampleLoopBegin) + if (samplePosition < sampleLoopBegin) { - samplePosition = sampleLoopBegin + (sampleLoopBegin - samplePosition); + samplePosition = sampleLoopBegin; loopDir = 0; } } else { - if (samplePosition >= sampleLoopEnd) + if (samplePosition == sampleLoopEnd) { - samplePosition = sampleLoopEnd - (samplePosition - sampleLoopEnd); + samplePosition = sampleLoopEnd - 1; loopDir = 1; } } } else { - if (samplePosition >= sampleLoopEnd) - samplePosition = sampleLoopBegin + (samplePosition - sampleLoopEnd); + if (samplePosition == sampleLoopEnd) + samplePosition = sampleLoopBegin; } } else if ((samplePosition < 0) || (samplePosition >= sampleLength)) @@ -4002,4 +4002,4 @@ void ft2play_GetInfo(void *_p, ft2_info *info) info->channels_playing = (uint8_t)channels_playing; } -// EOF \ No newline at end of file +// EOF