| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -16,7 +16,7 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       Define to use the module as standalone library (independently of raylib). | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       Required types and functions are defined in the same module. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_FILEFORMAT_WAV  / SUPPORT_LOAD_WAV | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_FILEFORMAT_WAV | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_FILEFORMAT_OGG | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_FILEFORMAT_XM | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_FILEFORMAT_MOD | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -24,9 +24,6 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       Selected desired fileformats to be supported for loading. Some of those formats are  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       supported by default, to remove support, just comment unrequired #define in this module | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   #define SUPPORT_RAW_AUDIO_BUFFERS | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       Support creating raw audio buffers to send raw data. Buffers must be managed by the user, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       it means initialization, refilling and cleaning. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   LIMITATIONS: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*       Only up to two channels supported: MONO and STEREO (for additional channels, use AL_EXT_MCFORMATS) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -70,6 +67,12 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//#define AUDIO_STANDALONE     // NOTE: To use the audio module as standalone lib, just uncomment this line | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Default configuration flags (supported features) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define SUPPORT_FILEFORMAT_WAV | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define SUPPORT_FILEFORMAT_OGG | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(AUDIO_STANDALONE) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "audio.h" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include <stdarg.h>         // Required for: va_list, va_start(), vfprintf(), va_end() | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -94,18 +97,26 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <string.h>             // Required for: strcmp(), strncmp() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <stdio.h>              // Required for: FILE, fopen(), fclose(), fread() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//#define STB_VORBIS_HEADER_ONLY | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "external/stb_vorbis.h"    // OGG loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_OGG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //#define STB_VORBIS_HEADER_ONLY | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "external/stb_vorbis.h"    // OGG loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define JAR_XM_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "external/jar_xm.h"        // XM loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_XM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define JAR_XM_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "external/jar_xm.h"        // XM loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define JAR_MOD_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "external/jar_mod.h"       // MOD loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define JAR_MOD_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "external/jar_mod.h"       // MOD loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define DR_FLAC_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define DR_FLAC_NO_WIN32_IO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include "external/dr_flac.h"       // FLAC loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define DR_FLAC_IMPLEMENTATION | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #define DR_FLAC_NO_WIN32_IO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "external/dr_flac.h"       // FLAC loading functions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#ifdef _MSC_VER | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #undef bool | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -140,10 +151,18 @@ typedef enum { MUSIC_AUDIO_OGG = 0, MUSIC_AUDIO_FLAC, MUSIC_MODULE_XM, MUSIC_MOD | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Music type (file streaming from memory) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			typedef struct MusicData { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    MusicContextType ctxType;           // Type of music context (OGG, XM, MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_OGG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    stb_vorbis *ctxOgg;                 // OGG audio context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    drflac *ctxFlac;                    // FLAC audio context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_XM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    jar_xm_context_t *ctxXm;            // XM chiptune context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    jar_mod_context_t ctxMod;           // MOD chiptune context | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    AudioStream stream;                 // Audio stream (double buffering) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -164,9 +183,15 @@ typedef enum { INFO = 0, ERROR, WARNING, DEBUG, OTHER } TraceLogType; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Module specific Functions Declaration | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_WAV) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadWAV(const char *fileName);          // Load WAV file | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_OGG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadOGG(const char *fileName);          // Load OGG file | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadFLAC(const char *fileName);         // Load FLAC file | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(AUDIO_STANDALONE) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			const char *GetExtension(const char *fileName);     // Get the extension for a filename | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -261,8 +286,13 @@ Wave LoadWave(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Wave wave = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (strcmp(GetExtension(fileName), "wav") == 0) wave = LoadWAV(fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_OGG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName), "ogg") == 0) wave = LoadOGG(fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName), "flac") == 0) wave = LoadFLAC(fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if !defined(AUDIO_STANDALONE) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName),"rres") == 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        RRES rres = LoadResource(fileName, 0); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -274,7 +304,8 @@ Wave LoadWave(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        UnloadResource(rres); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else TraceLog(WARNING, "[%s] File extension not recognized, it can't be loaded", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else TraceLog(WARNING, "[%s] Audio fileformat not supported, it can't be loaded", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return wave; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -664,6 +695,7 @@ Music LoadMusicStream(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            TraceLog(DEBUG, "[%s] OGG memory required: %i", fileName, info.temp_memory_required); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName), "flac") == 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        music->ctxFlac = drflac_open_file(fileName); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -683,6 +715,8 @@ Music LoadMusicStream(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            TraceLog(DEBUG, "[%s] FLAC channels: %i", fileName, music->ctxFlac->channels); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_XM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName), "xm") == 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int result = jar_xm_create_context_from_file(&music->ctxXm, 48000, fileName); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -703,6 +737,8 @@ Music LoadMusicStream(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else TraceLog(WARNING, "[%s] XM file could not be opened", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (strcmp(GetExtension(fileName), "mod") == 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        jar_mod_init(&music->ctxMod); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -720,7 +756,8 @@ Music LoadMusicStream(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else TraceLog(WARNING, "[%s] MOD file could not be opened", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else TraceLog(WARNING, "[%s] Music extension not recognized, it can't be loaded", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else TraceLog(WARNING, "[%s] Audio fileformat not supported, it can't be loaded", fileName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return music; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -731,9 +768,15 @@ void UnloadMusicStream(Music music) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseAudioStream(music->stream); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    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_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 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    free(music); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -778,8 +821,15 @@ void StopMusicStream(Music music) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    switch (music->ctxType) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        case MUSIC_AUDIO_OGG: stb_vorbis_seek_start(music->ctxOgg); break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        case MUSIC_MODULE_FLAC: /* TODO: Restart FLAC context */ break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_XM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        case MUSIC_MODULE_XM: /* TODO: Restart XM context */ break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        case MUSIC_MODULE_MOD: jar_mod_seek_start(&music->ctxMod); break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        default: break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -821,14 +871,20 @@ void UpdateMusicStream(Music music) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    int numSamplesOgg = stb_vorbis_get_samples_short_interleaved(music->ctxOgg, music->stream.channels, (short *)pcm, samplesCount*music->stream.channels); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case MUSIC_AUDIO_FLAC: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    // NOTE: Returns the number of samples to process | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    unsigned int numSamplesFlac = (unsigned int)drflac_read_s16(music->ctxFlac, samplesCount*music->stream.channels, (short *)pcm); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #if defined(SUPPORT_FILEFORMAT_XM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case MUSIC_MODULE_XM: jar_xm_generate_samples_16bit(music->ctxXm, pcm, samplesCount); break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #if defined(SUPPORT_FILEFORMAT_MOD) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                case MUSIC_MODULE_MOD: jar_mod_fillbuffer(&music->ctxMod, pcm, samplesCount, 0); break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            #endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                default: break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1067,6 +1123,7 @@ void StopAudioStream(AudioStream stream) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Module specific Functions Definition | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_WAV) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load WAV file into Wave structure | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadWAV(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1183,7 +1240,9 @@ static Wave LoadWAV(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return wave; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_OGG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load OGG file into Wave structure | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Using stb_vorbis library | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadOGG(const char *fileName) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1223,7 +1282,9 @@ static Wave LoadOGG(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return wave; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(SUPPORT_FILEFORMAT_FLAC) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load FLAC file into Wave structure | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Using dr_flac library | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Wave LoadFLAC(const char *fileName) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1245,6 +1306,7 @@ static Wave LoadFLAC(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return wave; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Some required functions for audio standalone module version | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(AUDIO_STANDALONE) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |