diff options
| author | veins1 <[email protected]> | 2022-08-01 23:07:32 +0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-08-01 20:07:32 +0200 |
| commit | a6b3c8aa1ed794df555dde397afaa0a4c2f236b8 (patch) | |
| tree | 01ca531ca0e1a4b552ab7f12bdbe72dc32b01451 /src/raudio.c | |
| parent | 2e5fc3d0c276d25ed51b46e4b3d0bf60445b9cb2 (diff) | |
| download | raylib-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.
Diffstat (limited to 'src/raudio.c')
| -rw-r--r-- | src/raudio.c | 16 |
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); |
