From 2b58af3db5f3e7dbad90a735005cb65aee7757e9 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 24 Oct 2015 23:31:53 -0700 Subject: [PATCH] Atrac: Handle loop samples more correctly. They need to be offset same as currentSamples. Starting to really think it'd be better to offset currentSamples instead... --- Core/HLE/sceAtrac.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp index 9e866c55f0..4f474e76e9 100644 --- a/Core/HLE/sceAtrac.cpp +++ b/Core/HLE/sceAtrac.cpp @@ -1027,13 +1027,13 @@ u32 _AtracDecodeData(int atracID, u8 *outbuf, u32 outbufPtr, u32 *SamplesNum, u3 int finishFlag = 0; // TODO: Verify. - if (atrac->loopNum != 0 && (atrac->currentSample > atrac->loopEndSample || - (numSamples == 0 && atrac->first.size >= atrac->first.filesize))) { - atrac->SeekToSample(atrac->loopStartSample); + bool hitEnd = atrac->currentSample >= atrac->endSample || (numSamples == 0 && atrac->first.size >= atrac->first.filesize); + int loopEndAdjusted = atrac->loopEndSample - firstOffsetExtra - atrac->firstSampleoffset; + if ((hitEnd || atrac->currentSample > loopEndAdjusted) && atrac->loopNum != 0) { + atrac->SeekToSample(atrac->loopStartSample - firstOffsetExtra - atrac->firstSampleoffset); if (atrac->loopNum > 0) - atrac->loopNum --; - } else if (atrac->currentSample >= atrac->endSample || - (numSamples == 0 && atrac->first.size >= atrac->first.filesize)) { + atrac->loopNum--; + } else if (hitEnd) { finishFlag = 1; } @@ -1739,8 +1739,8 @@ static u32 sceAtracSetLoopNum(int atracID, int loopNum) { atrac->loopNum = loopNum; if (loopNum != 0 && atrac->loopinfoNum == 0) { // Just loop the whole audio - atrac->loopStartSample = 0; int firstOffsetExtra = atrac->codecType == PSP_CODEC_AT3PLUS ? 368 : 69; + atrac->loopStartSample = atrac->firstSampleoffset + firstOffsetExtra; atrac->loopEndSample = atrac->endSample + atrac->firstSampleoffset + firstOffsetExtra; } }