Fix audio looping issue
This commit is contained in:
parent
38d46e0a84
commit
b1d38c7879
48
src/raudio.c
48
src/raudio.c
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user