From dc3327fba8df91b252f911cca8b26621622d3488 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sat, 28 Jul 2018 18:07:06 +0200 Subject: [PATCH] Reviewed music loading --- src/audio.c | 61 +++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/src/audio.c b/src/audio.c index ac88629d6..52632f13c 100644 --- a/src/audio.c +++ b/src/audio.c @@ -1321,43 +1321,18 @@ float *GetWaveData(Wave wave) // Module Functions Definition - Music loading and stream playing (.OGG) //---------------------------------------------------------------------------------- -// Set music to NULL in case of error and print warning -static void LoadMusicStreamError(MusicData **music, const char *fileName, const char *format) -{ - free(*music); - *music = NULL; - - if ((*music)->ctxType == MUSIC_AUDIO_OGG) stb_vorbis_close((*music)->ctxOgg); -#if defined(SUPPORT_FILEFORMAT_FLAC) - else if ((*music)->ctxType == MUSIC_AUDIO_FLAC) drflac_free((*music)->ctxFlac); -#endif -#if defined(SUPPORT_FILEFORMAT_MP3) - else if ((*music)->ctxType == MUSIC_AUDIO_MP3) drmp3_uninit(&(*music)->ctxMp3); -#endif -#if defined(SUPPORT_FILEFORMAT_XM) - else if ((*music)->ctxType == MUSIC_MODULE_XM) jar_xm_free_context((*music)->ctxXm); -#endif -#if defined(SUPPORT_FILEFORMAT_MOD) - else if ((*music)->ctxType == MUSIC_MODULE_MOD) jar_mod_unload(&(*music)->ctxMod); -#endif - - if (format) - TraceLog(LOG_WARNING, "[%s] %s audio file could not be opened", fileName, format); - else - TraceLog(LOG_WARNING, "[%s] Audio fileformat not supported, it can't be loaded", fileName); -} - // Load music stream from file Music LoadMusicStream(const char *fileName) { Music music = (MusicData *)malloc(sizeof(MusicData)); + bool musicLoaded = true; if (IsFileExtension(fileName, ".ogg")) { // Open ogg audio stream music->ctxOgg = stb_vorbis_open_filename(fileName, NULL, NULL); - if (music->ctxOgg == NULL) LoadMusicStreamError(&music, fileName, "OGG"); + if (music->ctxOgg == NULL) musicLoaded = false; else { stb_vorbis_info info = stb_vorbis_get_info(music->ctxOgg); // Get Ogg file info @@ -1380,7 +1355,7 @@ Music LoadMusicStream(const char *fileName) { music->ctxFlac = drflac_open_file(fileName); - if (music->ctxFlac == NULL) LoadMusicStreamError(&music, fileName, "FLAC"); + if (music->ctxFlac == NULL) musicLoaded = false; else { music->stream = InitAudioStream(music->ctxFlac->sampleRate, music->ctxFlac->bitsPerSample, music->ctxFlac->channels); @@ -1401,7 +1376,7 @@ Music LoadMusicStream(const char *fileName) { drmp3_init_file(&music->ctxMp3, fileName, NULL); - if (music->ctxMp3.framesRemaining <= 0) LoadMusicStreamError(&music, fileName, "MP3"); + if (music->ctxMp3.framesRemaining <= 0) musicLoaded = false; else { music->stream = InitAudioStream(music->ctxMp3.sampleRate, 16, music->ctxMp3.channels); @@ -1436,7 +1411,7 @@ Music LoadMusicStream(const char *fileName) TraceLog(LOG_DEBUG, "[%s] XM number of samples: %i", fileName, music->totalSamples); TraceLog(LOG_DEBUG, "[%s] XM track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); } - else LoadMusicStreamError(&music, fileName, "XM"); + else musicLoaded = false; } #endif #if defined(SUPPORT_FILEFORMAT_MOD) @@ -1455,10 +1430,32 @@ Music LoadMusicStream(const char *fileName) TraceLog(LOG_DEBUG, "[%s] MOD number of samples: %i", fileName, music->samplesLeft); TraceLog(LOG_DEBUG, "[%s] MOD track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); } - else LoadMusicStreamError(&music, fileName, "MOD"); + else musicLoaded = false; } #endif - else LoadMusicStreamError(&music, fileName, NULL); + else musicLoaded = false; + + if (!musicLoaded) + { + free(music); + music = NULL; + + if ((*music)->ctxType == MUSIC_AUDIO_OGG) stb_vorbis_close(music->ctxOgg); + #if defined(SUPPORT_FILEFORMAT_FLAC) + else if ((*music)->ctxType == MUSIC_AUDIO_FLAC) drflac_free(music->ctxFlac); + #endif + #if defined(SUPPORT_FILEFORMAT_MP3) + else if ((*music)->ctxType == MUSIC_AUDIO_MP3) drmp3_uninit(&music->ctxMp3); + #endif + #if defined(SUPPORT_FILEFORMAT_XM) + else if ((*music)->ctxType == MUSIC_MODULE_XM) jar_xm_free_context(music->ctxXm); + #endif + #if defined(SUPPORT_FILEFORMAT_MOD) + else if ((*music)->ctxType == MUSIC_MODULE_MOD) jar_mod_unload(&music->ctxMod); + #endif + + TraceLog(LOG_WARNING, "[%s] Music file could not be opened", fileName); + } return music; }