summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorveins1 <[email protected]>2022-08-05 11:36:59 +0500
committerGitHub <[email protected]>2022-08-05 08:36:59 +0200
commit82b76149da1ca4ca5d5956b780ac0ed08d61bd21 (patch)
tree70573b55e820650a4a8bd24e9ad8cec48046ab6a
parentb0b63817459b1e715380cdd1805076b8cd0d2810 (diff)
downloadraylib-82b76149da1ca4ca5d5956b780ac0ed08d61bd21.tar.gz
raylib-82b76149da1ca4ca5d5956b780ac0ed08d61bd21.zip
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.
-rw-r--r--src/raudio.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/raudio.c b/src/raudio.c
index af19658b..48c5e87e 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;
}
}