diff options
| author | Ray <raysan5@gmail.com> | 2018-07-28 11:15:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-28 11:15:41 +0200 |
| commit | 9150b54b3e4033f55ca1a8ec3440c099e563db93 (patch) | |
| tree | 475f893206c45ba6adb49a2610c6002748828ef9 /src | |
| parent | c69f7953c79652c43ca56392d0df0bcf446da517 (diff) | |
| parent | 7a5b1b13e2c4f0be11a94bd3186bf8419fe2c7d3 (diff) | |
| download | raylib-9150b54b3e4033f55ca1a8ec3440c099e563db93.tar.gz raylib-9150b54b3e4033f55ca1a8ec3440c099e563db93.zip | |
Merge pull request #603 from jubalh/lse
Deal with failed LoadMusicStream
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio.c | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/audio.c b/src/audio.c index b6e2e4c6..ac88629d 100644 --- a/src/audio.c +++ b/src/audio.c @@ -1321,6 +1321,32 @@ 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) { @@ -1331,7 +1357,7 @@ Music LoadMusicStream(const char *fileName) // Open ogg audio stream music->ctxOgg = stb_vorbis_open_filename(fileName, NULL, NULL); - if (music->ctxOgg == NULL) TraceLog(LOG_WARNING, "[%s] OGG audio file could not be opened", fileName); + if (music->ctxOgg == NULL) LoadMusicStreamError(&music, fileName, "OGG"); else { stb_vorbis_info info = stb_vorbis_get_info(music->ctxOgg); // Get Ogg file info @@ -1354,7 +1380,7 @@ Music LoadMusicStream(const char *fileName) { music->ctxFlac = drflac_open_file(fileName); - if (music->ctxFlac == NULL) TraceLog(LOG_WARNING, "[%s] FLAC audio file could not be opened", fileName); + if (music->ctxFlac == NULL) LoadMusicStreamError(&music, fileName, "FLAC"); else { music->stream = InitAudioStream(music->ctxFlac->sampleRate, music->ctxFlac->bitsPerSample, music->ctxFlac->channels); @@ -1375,7 +1401,7 @@ Music LoadMusicStream(const char *fileName) { drmp3_init_file(&music->ctxMp3, fileName, NULL); - if (music->ctxMp3.framesRemaining <= 0) TraceLog(LOG_WARNING, "[%s] MP3 audio file could not be opened", fileName); + if (music->ctxMp3.framesRemaining <= 0) LoadMusicStreamError(&music, fileName, "MP3"); else { music->stream = InitAudioStream(music->ctxMp3.sampleRate, 16, music->ctxMp3.channels); @@ -1410,7 +1436,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 TraceLog(LOG_WARNING, "[%s] XM file could not be opened", fileName); + else LoadMusicStreamError(&music, fileName, "XM"); } #endif #if defined(SUPPORT_FILEFORMAT_MOD) @@ -1429,10 +1455,10 @@ 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 TraceLog(LOG_WARNING, "[%s] MOD file could not be opened", fileName); + else LoadMusicStreamError(&music, fileName, "MOD"); } #endif - else TraceLog(LOG_WARNING, "[%s] Audio fileformat not supported, it can't be loaded", fileName); + else LoadMusicStreamError(&music, fileName, NULL); return music; } |
