|
@ -1321,43 +1321,18 @@ float *GetWaveData(Wave wave) |
|
|
// Module Functions Definition - Music loading and stream playing (.OGG) |
|
|
// 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 |
|
|
// Load music stream from file |
|
|
Music LoadMusicStream(const char *fileName) |
|
|
Music LoadMusicStream(const char *fileName) |
|
|
{ |
|
|
{ |
|
|
Music music = (MusicData *)malloc(sizeof(MusicData)); |
|
|
Music music = (MusicData *)malloc(sizeof(MusicData)); |
|
|
|
|
|
bool musicLoaded = true; |
|
|
|
|
|
|
|
|
if (IsFileExtension(fileName, ".ogg")) |
|
|
if (IsFileExtension(fileName, ".ogg")) |
|
|
{ |
|
|
{ |
|
|
// Open ogg audio stream |
|
|
// Open ogg audio stream |
|
|
music->ctxOgg = stb_vorbis_open_filename(fileName, NULL, NULL); |
|
|
music->ctxOgg = stb_vorbis_open_filename(fileName, NULL, NULL); |
|
|
|
|
|
|
|
|
if (music->ctxOgg == NULL) LoadMusicStreamError(&music, fileName, "OGG"); |
|
|
|
|
|
|
|
|
if (music->ctxOgg == NULL) musicLoaded = false; |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
stb_vorbis_info info = stb_vorbis_get_info(music->ctxOgg); // Get Ogg file info |
|
|
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); |
|
|
music->ctxFlac = drflac_open_file(fileName); |
|
|
|
|
|
|
|
|
if (music->ctxFlac == NULL) LoadMusicStreamError(&music, fileName, "FLAC"); |
|
|
|
|
|
|
|
|
if (music->ctxFlac == NULL) musicLoaded = false; |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
music->stream = InitAudioStream(music->ctxFlac->sampleRate, music->ctxFlac->bitsPerSample, music->ctxFlac->channels); |
|
|
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); |
|
|
drmp3_init_file(&music->ctxMp3, fileName, NULL); |
|
|
|
|
|
|
|
|
if (music->ctxMp3.framesRemaining <= 0) LoadMusicStreamError(&music, fileName, "MP3"); |
|
|
|
|
|
|
|
|
if (music->ctxMp3.framesRemaining <= 0) musicLoaded = false; |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
music->stream = InitAudioStream(music->ctxMp3.sampleRate, 16, music->ctxMp3.channels); |
|
|
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 number of samples: %i", fileName, music->totalSamples); |
|
|
TraceLog(LOG_DEBUG, "[%s] XM track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); |
|
|
TraceLog(LOG_DEBUG, "[%s] XM track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); |
|
|
} |
|
|
} |
|
|
else f">LoadMusicStreamError(&music, fileName, "XM"); |
|
|
|
|
|
|
|
|
else ">musicLoaded = false; |
|
|
} |
|
|
} |
|
|
#endif |
|
|
#endif |
|
|
#if defined(SUPPORT_FILEFORMAT_MOD) |
|
|
#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 number of samples: %i", fileName, music->samplesLeft); |
|
|
TraceLog(LOG_DEBUG, "[%s] MOD track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); |
|
|
TraceLog(LOG_DEBUG, "[%s] MOD track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f); |
|
|
} |
|
|
} |
|
|
else f">LoadMusicStreamError(&music, fileName, "MOD"); |
|
|
|
|
|
|
|
|
else ">musicLoaded = false; |
|
|
} |
|
|
} |
|
|
#endif |
|
|
#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; |
|
|
return music; |
|
|
} |
|
|
} |
|
|