summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorveins1 <[email protected]>2022-08-01 23:07:32 +0500
committerGitHub <[email protected]>2022-08-01 20:07:32 +0200
commita6b3c8aa1ed794df555dde397afaa0a4c2f236b8 (patch)
tree01ca531ca0e1a4b552ab7f12bdbe72dc32b01451
parent2e5fc3d0c276d25ed51b46e4b3d0bf60445b9cb2 (diff)
downloadraylib-a6b3c8aa1ed794df555dde397afaa0a4c2f236b8.tar.gz
raylib-a6b3c8aa1ed794df555dde397afaa0a4c2f236b8.zip
Music doesn't stop looping fix (#2605)
This PR fixes a bug when music.looping is set to false but the music continues looping. Also using proper functions to seek to start of an audio file. Removed old comment.
-rw-r--r--src/raudio.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/raudio.c b/src/raudio.c
index 42ffdabf..796933a6 100644
--- a/src/raudio.c
+++ b/src/raudio.c
@@ -1734,14 +1734,13 @@ void UpdateMusicStream(Music music)
AUDIO.System.pcmBufferSize = pcmSize;
}
- int framesLeft = music.frameCount - music.stream.buffer->framesProcessed; // Frames left to be processed
- int framesToStream = 0; // Total frames to be streamed
-
// Check both sub-buffers to check if they require refilling
for (int i = 0; i < 2; i++)
{
if ((music.stream.buffer != NULL) && !music.stream.buffer->isSubBufferProcessed[i]) continue; // No refilling required, move to next sub-buffer
+ unsigned int framesLeft = music.frameCount - music.stream.buffer->framesProcessed; // Frames left to be processed
+ unsigned int framesToStream = 0; // Total frames to be streamed
if ((framesLeft >= subBufferSizeInFrames) || music.looping) framesToStream = subBufferSizeInFrames;
else framesToStream = framesLeft;
@@ -1760,7 +1759,7 @@ void UpdateMusicStream(Music music)
frameCountRedTotal += frameCountRed;
frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) break;
- else drwav_seek_to_pcm_frame((drwav *)music.ctxData, 0);
+ else drwav_seek_to_first_pcm_frame((drwav *)music.ctxData);
}
}
else if (music.stream.sampleSize == 32)
@@ -1771,7 +1770,7 @@ void UpdateMusicStream(Music music)
frameCountRedTotal += frameCountRed;
frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) break;
- else drwav_seek_to_pcm_frame((drwav *)music.ctxData, 0);
+ else drwav_seek_to_first_pcm_frame((drwav *)music.ctxData);
}
}
} break;
@@ -1798,7 +1797,7 @@ void UpdateMusicStream(Music music)
frameCountRedTotal += frameCountRed;
frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) break;
- else drflac_seek_to_pcm_frame((drflac *)music.ctxData, 0);
+ else drflac__seek_to_first_frame((drflac *)music.ctxData);
}
} break;
#endif
@@ -1811,7 +1810,7 @@ void UpdateMusicStream(Music music)
frameCountRedTotal += frameCountRed;
frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) break;
- else drmp3_seek_to_pcm_frame((drmp3 *)music.ctxData, 0);
+ else drmp3_seek_to_start_of_stream((drmp3 *)music.ctxData);
}
} break;
#endif
@@ -1842,6 +1841,8 @@ void UpdateMusicStream(Music music)
UpdateAudioStream(music.stream, AUDIO.System.pcmBuffer, framesToStream);
+ music.stream.buffer->framesProcessed = music.stream.buffer->framesProcessed%music.frameCount;
+
if (framesLeft <= subBufferSizeInFrames)
{
// Streaming is ending, we filled latest frames from input
@@ -1850,7 +1851,6 @@ void UpdateMusicStream(Music music)
}
}
- // Reset audio stream for looping
if (streamEnding)
{
if (!music.looping) StopMusicStream(music);