Fix audio looping issue

This commit is contained in:
veins1 2022-07-17 13:05:28 +05:00 committed by GitHub
parent 38d46e0a84
commit b1d38c7879
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1760,7 +1760,6 @@ void UpdateMusicStream(Music music)
#if defined(SUPPORT_FILEFORMAT_WAV) #if defined(SUPPORT_FILEFORMAT_WAV)
case MUSIC_AUDIO_WAV: case MUSIC_AUDIO_WAV:
{ {
// NOTE: Returns the number of samples to process (not required)
if (music.stream.sampleSize == 16) { if (music.stream.sampleSize == 16) {
while (true) { while (true) {
int frameCountRed = drwav_read_pcm_frames_s16((drwav*)music.ctxData, frameCountStillNeeded, (short*)(AUDIO.System.pcmBuffer + frameCountRedTotal * frameSize)); int frameCountRed = drwav_read_pcm_frames_s16((drwav*)music.ctxData, frameCountStillNeeded, (short*)(AUDIO.System.pcmBuffer + frameCountRedTotal * frameSize));
@ -1792,30 +1791,49 @@ void UpdateMusicStream(Music music)
#if defined(SUPPORT_FILEFORMAT_OGG) #if defined(SUPPORT_FILEFORMAT_OGG)
case MUSIC_AUDIO_OGG: case MUSIC_AUDIO_OGG:
{ {
// NOTE: Returns the number of samples to process (be careful! we ask for number of shorts!) while (true) {
stb_vorbis_get_samples_short_interleaved((stb_vorbis *)music.ctxData, music.stream.channels, (short *)AUDIO.System.pcmBuffer, framesToStream*music.stream.channels); int frameCountRed = stb_vorbis_get_samples_short_interleaved((stb_vorbis*)music.ctxData, music.stream.channels, (short*)(AUDIO.System.pcmBuffer + frameCountRedTotal * frameSize), frameCountStillNeeded * music.stream.channels);
frameCountRedTotal += frameCountRed;
// stb_vorbis_seek_start((stb_vorbis *)music.ctxData); frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) {
break;
}
else {
stb_vorbis_seek_start((stb_vorbis*)music.ctxData);
}
}
} break; } break;
#endif #endif
#if defined(SUPPORT_FILEFORMAT_FLAC) #if defined(SUPPORT_FILEFORMAT_FLAC)
case MUSIC_AUDIO_FLAC: case MUSIC_AUDIO_FLAC:
{ {
// NOTE: Returns the number of samples to process (not required) while (true) {
drflac_read_pcm_frames_s16((drflac *)music.ctxData, frameCountToStream*music.stream.channels, (short *)AUDIO.System.pcm); int frameCountRed = drflac_read_pcm_frames_s16((drflac*)music.ctxData, frameCountStillNeeded, (short*)(AUDIO.System.pcmBuffer + frameCountRedTotal * frameSize));
frameCountRedTotal += frameCountRed;
// drflac_seek_to_pcm_frame((drflac *)music.ctxData, 0); frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) {
break;
}
else {
drflac_seek_to_pcm_frame((drflac*)music.ctxData, 0);
}
}
} break; } break;
#endif #endif
#if defined(SUPPORT_FILEFORMAT_MP3) #if defined(SUPPORT_FILEFORMAT_MP3)
case MUSIC_AUDIO_MP3: case MUSIC_AUDIO_MP3:
{ {
drmp3_read_pcm_frames_f32((drmp3 *)music.ctxData, framesToStream, (float *)AUDIO.System.pcmBuffer); while (true) {
int frameCountRed = drmp3_read_pcm_frames_f32((drmp3*)music.ctxData, frameCountStillNeeded, (float*)(AUDIO.System.pcmBuffer + frameCountRedTotal * frameSize));
//drmp3_seek_to_pcm_frame((drmp3 *)music.ctxData, 0); frameCountRedTotal += frameCountRed;
frameCountStillNeeded -= frameCountRed;
if (frameCountStillNeeded == 0) {
break;
}
else {
drmp3_seek_to_pcm_frame((drmp3*)music.ctxData, 0);
}
}
} break; } break;
#endif #endif
#if defined(SUPPORT_FILEFORMAT_XM) #if defined(SUPPORT_FILEFORMAT_XM)