From 82b76149da1ca4ca5d5956b780ac0ed08d61bd21 Mon Sep 17 00:00:00 2001 From: veins1 Date: Fri, 5 Aug 2022 11:36:59 +0500 Subject: [PATCH] GetMusicTimePlayed bug fix (#2614) GetMusicTimePlayed() was calculated using buffered frames, not played frames. For example: calling LoadMusicStream->UpdateMusicStream->GetMusicTimePlayed would return non-zero value, even though no music was playing. --- src/raudio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/raudio.c b/src/raudio.c index af19658bb..48c5e87e6 100644 --- a/src/raudio.c +++ b/src/raudio.c @@ -1915,7 +1915,13 @@ float GetMusicTimePlayed(Music music) #endif { //ma_uint32 frameSizeInBytes = ma_get_bytes_per_sample(music.stream.buffer->dsp.formatConverterIn.config.formatIn)*music.stream.buffer->dsp.formatConverterIn.config.channels; - unsigned int framesPlayed = music.stream.buffer->framesProcessed; + int framesProcessed = (int)music.stream.buffer->framesProcessed; + int subBufferSize = (int)music.stream.buffer->sizeInFrames/2; + int framesInFirstBuffer = music.stream.buffer->isSubBufferProcessed[0]? 0 : subBufferSize; + int framesInSecondBuffer = music.stream.buffer->isSubBufferProcessed[1]? 0 : subBufferSize; + int framesSentToMix = music.stream.buffer->frameCursorPos%subBufferSize; + int framesPlayed = (framesProcessed - framesInFirstBuffer - framesInSecondBuffer + framesSentToMix)%(int)music.frameCount; + if (framesPlayed < 0) framesPlayed += music.frameCount; secondsPlayed = (float)framesPlayed/music.stream.sampleRate; } }