| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -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; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |