@ -728,11 +728,11 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( success )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampl eCount  =  ( unsigned  int ) wav . totalPCMFrameCount* wav . channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . fram eCount  =  ( unsigned  int ) wav . totalPCMFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampleRate  =  wav . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampleSize  =  16 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . channels  =  wav . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . data  =  ( short  * ) RL_MALLOC ( wave . sampleCount * sizeof ( short ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . data  =  ( short  * ) RL_MALLOC ( wave . frameCount * wave . channels * sizeof ( short ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  We  are  forcing  conversion  to  16 bit  sample  size  on  reading   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            drwav_read_pcm_frames_s16 ( & wav ,  wav . totalPCMFrameCount ,  wave . data ) ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -754,11 +754,11 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampleRate  =  info . sample_rate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampleSize  =  16 ;        / /  By  default ,  ogg  data  is  16  bit  per  sample  ( short )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . channels  =  info . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampl eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( oggData ) o">* info . channels ;   / /  Independent  by  channel   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . data  =  ( short  * ) RL_MALLOC ( wave . sampleCount * sizeof ( short ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . fram eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( oggData ) p">;   / /  NOTE :  It  returns  frames !   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . data  =  ( short  * ) RL_MALLOC ( wave . frameCount * wave . channels * sizeof ( short ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Get  the  number  of  samples  to  process  ( be  careful !  we  ask  for  number  of  shorts ! )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            stb_vorbis_get_samples_short_interleaved ( oggData ,  info . channels ,  ( short  * ) wave . data ,  wave . sampleCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Get  the  number  of  samples  to  process  ( be  careful !  we  ask  for  number  of  shorts p">,  not  bytes ! )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            stb_vorbis_get_samples_short_interleaved ( oggData ,  info . channels ,  ( short  * ) wave . data ,  wave . frameCount * wave . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            stb_vorbis_close ( oggData ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  TRACELOG ( LOG_WARNING ,  " WAVE: Failed to load OGG data " ) ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -773,7 +773,7 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        wave . data  =  drflac_open_memory_and_read_pcm_frames_s16 ( fileData ,  dataSize ,  & wave . channels ,  & wave . sampleRate ,  & totalFrameCount ,  NULL ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        wave . sampleSize  =  16 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( wave . data  ! =  NULL )  wave . sampl eCount  =  ( unsigned  int ) totalFrameCount* wave . channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( wave . data  ! =  NULL )  wave . fram eCount  =  ( unsigned  int ) totalFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  TRACELOG ( LOG_WARNING ,  " WAVE: Failed to load FLAC data " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			# endif  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -791,7 +791,7 @@ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . channels  =  config . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampleRate  =  config . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . sampl eCount  =  ( int ) totalFrameCount* wave . channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            wave . fram eCount  =  ( int ) totalFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  TRACELOG ( LOG_WARNING ,  " WAVE: Failed to load MP3 data " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -835,7 +835,7 @@ Sound LoadSoundFromWave(Wave wave)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  First  option  has  been  selected ,  format  conversion  is  done  on  the  loading  stage .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  The  downside  is  that  it  uses  more  memory  if  the  original  sound  is  u8  or  s16 .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ma_format  formatIn  =  ( ( wave . sampleSize  = =  8 ) ?  ma_format_u8  :  ( ( wave . sampleSize  = =  16 ) ?  ma_format_s16  :  ma_format_f32 ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ma_uint32  frameCountIn  =  wave . sampleCount / wave . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ma_uint32  frameCountIn  =  wave . frameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ma_uint32  frameCount  =  ( ma_uint32 ) ma_convert_frames ( NULL ,  0 ,  AUDIO_DEVICE_FORMAT ,  AUDIO_DEVICE_CHANNELS ,  AUDIO . System . device . sampleRate ,  NULL ,  frameCountIn ,  formatIn ,  wave . channels ,  wave . sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( frameCount  = =  0 )  TRACELOG ( LOG_WARNING ,  " SOUND: Failed to get frame count for format conversion " ) ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -850,7 +850,7 @@ Sound LoadSoundFromWave(Wave wave)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        frameCount  =  ( ma_uint32 ) ma_convert_frames ( audioBuffer - > data ,  frameCount ,  AUDIO_DEVICE_FORMAT ,  AUDIO_DEVICE_CHANNELS ,  AUDIO . System . device . sampleRate ,  wave . data ,  frameCountIn ,  formatIn ,  wave . channels ,  wave . sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( frameCount  = =  0 )  TRACELOG ( LOG_WARNING ,  " SOUND: Failed format conversion " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        sound . sampl eCount  =  frameCount* AUDIO_DEVICE_CHANNELS  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        sound . fram eCount  =  frameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        sound . stream . sampleRate  =  AUDIO . System . device . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        sound . stream . sampleSize  =  32 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        sound . stream . channels  =  AUDIO_DEVICE_CHANNELS ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -908,7 +908,7 @@ bool ExportWave(Wave wave, const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        void  * fileData  =  NULL ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        size_t  fileDataSize  =  0 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        success  =  drwav_init_memory_write ( & wav ,  & fileData ,  & fileDataSize ,  & format ,  NULL ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( success )  success  =  ( int ) drwav_write_pcm_frames ( & wav ,  wave . sampleCount / wave . channels ,  wave . data ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( success )  success  =  ( int ) drwav_write_pcm_frames ( & wav ,  wave . frameCount ,  wave . data ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        drwav_result  result  =  drwav_uninit ( & wav ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( result  = =  DRWAV_SUCCESS )  success  =  SaveFileData ( fileName ,  ( unsigned  char  * ) fileData ,  ( unsigned  int ) fileDataSize ) ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -920,7 +920,7 @@ bool ExportWave(Wave wave, const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Export  raw  sample  data  ( without  header )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  NOTE :  It ' s  up  to  the  user  to  track  wave  parameters   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        success  =  SaveFileData ( fileName ,  wave . data ,  wave . sampleCount * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        success  =  SaveFileData ( fileName ,  wave . data ,  wave . frameCount * wave . channels * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( success )  TRACELOG ( LOG_INFO ,  " FILEIO: [%s] Wave data exported successfully " ,  fileName ) ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -938,7 +938,7 @@ bool ExportWaveAsCode(Wave wave, const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    # define TEXT_BYTES_PER_LINE     20   
			
		 
		
	
		
			
			 
			 
			
			 
			
			# endif  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  waveDataSize  =  wave . sampl eCount* wave . channels * wave . sampleSize / 8 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  waveDataSize  =  wave . fram eCount* wave . channels * wave . sampleSize / 8 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  NOTE :  Text  data  buffer  size  is  estimated  considering  wave  data  size  in  bytes   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  and  requiring  6  char  bytes  for  every  byte :  " 0x00,  "   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -966,7 +966,8 @@ bool ExportWaveAsCode(Wave wave, const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# endif  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " // Wave data information \n " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_SAMPLE_COUNT     %u \n " ,  varFileName ,  wave . sampleCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_FRAME_COUNT      %u \n " ,  varFileName ,  wave . frameCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_SAMPLE_COUNT     %u \n " ,  varFileName ,  wave . frameCount * wave . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_SAMPLE_RATE      %u \n " ,  varFileName ,  wave . sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_SAMPLE_SIZE      %u \n " ,  varFileName ,  wave . sampleSize ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bytesCount  + =  sprintf ( txtData  +  bytesCount ,  " #define %s_CHANNELS         %u \n \n " ,  varFileName ,  wave . channels ) ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1111,7 +1112,7 @@ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ma_format  formatIn  =  ( ( wave - > sampleSize  = =  8 ) ?  ma_format_u8  :  ( ( wave - > sampleSize  = =  16 ) ?  ma_format_s16  :  ma_format_f32 ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ma_format  formatOut  =  ( ( sampleSize  = =  8 ) ?  ma_format_u8  :  ( ( sampleSize  = =  16 ) ?  ma_format_s16  :  ma_format_f32 ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ma_uint32  frameCountIn  =  wave - > sampleCount / wave - > channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ma_uint32  frameCountIn  =  wave - > frameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    ma_uint32  frameCount  =  ( ma_uint32 ) ma_convert_frames ( NULL ,  0 ,  formatOut ,  channels ,  sampleRate ,  NULL ,  frameCountIn ,  formatIn ,  wave - > channels ,  wave - > sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( frameCount  = =  0 )   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1129,7 +1130,7 @@ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        return ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    wave - > sampl eCount  =  frameCount* channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    wave - > fram eCount  =  frameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    wave - > sampleSize  =  sampleSize ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    wave - > sampleRate  =  sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    wave - > channels  =  channels ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1142,14 +1143,14 @@ Wave WaveCopy(Wave wave)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Wave  newWave  =  {  0  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    newWave . data  =  RL_MALLOC ( wave . sampleCount * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    newWave . data  =  RL_MALLOC ( wave . frameCount * wave . channels * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( newWave . data  ! =  NULL )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  NOTE :  Size  must  be  provided  in  bytes   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        memcpy ( newWave . data ,  wave . data ,  wave . sampleCount * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        memcpy ( newWave . data ,  wave . data ,  wave . frameCount * wave . channels * wave . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        newWave . sampl eCount  =  wave . sampl eCount;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        newWave . fram eCount  =  wave . fram eCount;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        newWave . sampleRate  =  wave . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        newWave . sampleSize  =  wave . sampleSize ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        newWave . channels  =  wave . channels ;   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1163,7 +1164,7 @@ Wave WaveCopy(Wave wave)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			void  WaveCrop ( Wave  * wave ,  int  initSample ,  int  finalSample )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( ( initSample  > =  0 )  & &  ( initSample  <  finalSample )  & &   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ( finalSample  >  0 )  & &  ( ( unsigned  int ) finalSample  <  wave - > sampleCount ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        ( finalSample  >  0 )  & &  ( ( unsigned  int ) finalSample  <  p">( wave - > frameCount * wave - > channels ) ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        int  sampleCount  =  finalSample  -  initSample ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1182,11 +1183,11 @@ void WaveCrop(Wave *wave, int initSample, int finalSample)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  NOTE  2 :  Sample  data  allocated  should  be  freed  with  UnloadWaveSamples ( )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			float  * LoadWaveSamples ( Wave  wave )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  * samples  =  ( float  * ) RL_MALLOC ( wave . sampleCount * sizeof ( float ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  * samples  =  ( float  * ) RL_MALLOC ( wave . frameCount * wave . channels * sizeof ( float ) ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  NOTE :  sampleCount  is  the  total  number  of  interlaced  samples  ( including  channels )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    for  ( unsigned  int  i  =  0 ;  i  <  wave . sampleCount ;  i + + )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    for  ( unsigned  int  i  =  0 ;  i  <  wave . frameCount * wave . channels ;  i + + )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( wave . sampleSize  = =  8 )  samples [ i ]  =  ( float ) ( ( ( unsigned  char  * ) wave . data ) [ i ]  -  127 ) / 256.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  if  ( wave . sampleSize  = =  16 )  samples [ i ]  =  ( float ) ( ( ( short  * ) wave . data ) [ i ] ) / 32767.0f ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1228,7 +1229,7 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( ctxWav - > bitsPerSample  = =  24 )  sampleSize  =  16 ;    / /  Forcing  conversion  to  s16  on  UpdateMusicStream ( )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxWav - > sampleRate ,  sampleSize ,  ctxWav - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) ctxWav - > totalPCMFrameCount* ctxWav - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) ctxWav - > totalPCMFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1249,7 +1250,7 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( info . sample_rate ,  16 ,  info . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  WARNING :  It  seems  this  function  returns  length  in  frames ,  not  samples ,  so  we  multiply  by  channels   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( ( stb_vorbis  * ) music . ctxData )* info . channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( ( stb_vorbis  * ) music . ctxData ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1266,7 +1267,7 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            drflac  * ctxFlac  =  ( drflac  * ) music . ctxData ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxFlac - > sampleRate ,  ctxFlac - > bitsPerSample ,  ctxFlac - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) ctxFlac - > totalPCMFrameCount* ctxFlac - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) ctxFlac - > totalPCMFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1284,7 +1285,7 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( result  >  0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxMp3 - > sampleRate ,  32 ,  ctxMp3 - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) drmp3_get_pcm_frame_count ( ctxMp3 )* ctxMp3 - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) drmp3_get_pcm_frame_count ( ctxMp3 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1309,9 +1310,9 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Only  stereo  is  supported  for  XM   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( AUDIO . System . device . sampleRate ,  bits ,  AUDIO_DEVICE_CHANNELS ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) jar_xm_get_remaining_samples ( ctxXm ) o">* 2 ;     / /   2  channels  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) jar_xm_get_remaining_samples ( ctxXm ) p">;     / /  NOTE :  Always   2  channels  ( stereo )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            jar_xm_reset ( ctxXm ) ;    / /  make  sure  we  start  at  the  beginning  of  the  song   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            jar_xm_reset ( ctxXm ) ;      / /  make  sure  we  start  at  the  beginning  of  the  song   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1330,7 +1331,7 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Only  stereo  is  supported  for  MOD   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( AUDIO . System . device . sampleRate ,  16 ,  AUDIO_DEVICE_CHANNELS ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) jar_mod_max_samples ( ctxMod ) o">* 2 ;     / /   2  channels  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) jar_mod_max_samples ( ctxMod ) p">;     / /  NOTE :  Always   2  channels  ( stereo )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1367,10 +1368,10 @@ Music LoadMusicStream(const char *fileName)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Show  some  music  stream  info   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  " FILEIO: [%s] Music file loaded successfully " ,  fileName ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Total samples: %i " ,  music . sampleCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Sample rate:   %i Hz " ,  music . stream . sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Sample size:   %i bits " ,  music . stream . sampleSize ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Channels:      %i (%s) " ,  music . stream . channels ,  ( music . stream . channels  = =  1 ) ?  " Mono "  :  ( music . stream . channels  = =  2 ) ?  " Stereo "  :  " Multi " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Total frames:  %i " ,  music . frameCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    return  music ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1402,7 +1403,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( ctxWav - > bitsPerSample  = =  24 )  sampleSize  =  16 ;    / /  Forcing  conversion  to  s16  on  UpdateMusicStream ( )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxWav - > sampleRate ,  sampleSize ,  ctxWav - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) ctxWav - > totalPCMFrameCount* ctxWav - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) ctxWav - > totalPCMFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1419,7 +1420,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            drflac  * ctxFlac  =  ( drflac  * ) music . ctxData ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxFlac - > sampleRate ,  ctxFlac - > bitsPerSample ,  ctxFlac - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) ctxFlac - > totalPCMFrameCount* ctxFlac - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) ctxFlac - > totalPCMFrameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1437,7 +1438,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( success )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( ctxMp3 - > sampleRate ,  32 ,  ctxMp3 - > channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) drmp3_get_pcm_frame_count ( ctxMp3 )* ctxMp3 - > channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) drmp3_get_pcm_frame_count ( ctxMp3 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1459,7 +1460,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( info . sample_rate ,  16 ,  info . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  WARNING :  It  seems  this  function  returns  length  in  frames ,  not  samples ,  so  we  multiply  by  channels   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( ( stb_vorbis  * ) music . ctxData )* info . channels  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) stb_vorbis_stream_length_in_samples ( ( stb_vorbis  * ) music . ctxData ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1483,7 +1484,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Only  stereo  is  supported  for  XM   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( AUDIO . System . device . sampleRate ,  bits ,  2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) jar_xm_get_remaining_samples ( ctxXm ) o">* 2 ;     / /   2  channels  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) jar_xm_get_remaining_samples ( ctxXm ) p">;     / /  NOTE :  Always   2  channels  ( stereo )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            jar_xm_reset ( ctxXm ) ;    / /  make  sure  we  start  at  the  beginning  of  the  song   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1521,7 +1522,7 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  NOTE :  Only  stereo  is  supported  for  MOD   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . stream  =  LoadAudioStream ( AUDIO . System . device . sampleRate ,  16 ,  2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . sampl eCount  =  ( unsigned  int ) jar_mod_max_samples ( ctxMod ) o">* 2 ;     / /   2  channels  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . fram eCount  =  ( unsigned  int ) jar_mod_max_samples ( ctxMod ) p">;     / /  NOTE :  Always   2  channels  ( stereo )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            music . looping  =  true ;    / /  Looping  enabled  by  default   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            musicLoaded  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1561,10 +1562,10 @@ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int d  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Show  some  music  stream  info   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  " FILEIO: Music data loaded successfully " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Total samples: %i " ,  music . sampleCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Sample rate:   %i Hz " ,  music . stream . sampleRate ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Sample size:   %i bits " ,  music . stream . sampleSize ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Channels:      %i (%s) " ,  music . stream . channels ,  ( music . stream . channels  = =  1 ) ?  " Mono "  :  ( music . stream . channels  = =  2 ) ?  " Stereo "  :  " Multi " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        TRACELOG ( LOG_INFO ,  "     > Total frames:  %i " ,  music . frameCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    return  music ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1660,29 +1661,22 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( music . stream . buffer  = =  NULL )  return ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# if defined(SUPPORT_FILEFORMAT_XM)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( music . ctxType  = =  MUSIC_MODULE_XM )  jar_xm_set_max_loop_count ( music . ctxData ,  music . looping  ?  0  :  1 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			# endif  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bool  streamEnding  =  false ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    unsigned  int  subBufferSizeInFrames  =  music . stream . buffer - > sizeInFrames / 2 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  NOTE :  Using  dynamic  allocation  because  it  could  require  more  than  16 KB   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    void  * pcm  =  RL_CALLOC ( subBufferSizeInFrames * music . stream . channels * music . stream . sampleSize / 8 ,  1 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  samplesCount   =  0 ;     / /  Total  size  of  data  streamed  in  L + R  samples  for  xm  floats ,  individual  L  or  R  for  ogg  shorts   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  frameCountToStream   =  0 ;     / /  Total  size  of  data  in  frames  to  be  streamed   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  TODO :  Get  the  sample Left  using  framesProcessed . . .  but  first ,  get  total  frames  processed  correctly . . .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  TODO :  Get  the  frames Left  using  framesProcessed . . .  but  first ,  get  total  frames  processed  correctly . . .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / / ma_uint32  frameSizeInBytes  =  ma_get_bytes_per_sample ( music . stream . buffer - > dsp . formatConverterIn . config . formatIn ) * music . stream . buffer - > dsp . formatConverterIn . config . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  sampleLeft  =  music . sampleCount  -  ( music . stream . buffer - > framesProcessed * music . stream . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( music . ctxType  = =  MUSIC_MODULE_XM  & &  music . looping )  sampleLeft  =  subBufferSizeInFrames * 4 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  framesLeft  =  music . frameCount  -  music . stream . buffer - > framesProcessed ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    while  ( IsAudioStreamProcessed ( music . stream ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( p">( sampleLeft / music . stream . channels )   > =  subBufferSizeInFrames )  samplesCount   =  subBufferSizeInFrames * music . stream . channel s ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  samplesCount  =  sample Left;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( n">framesLeft   > =  subBufferSizeInFrames )  frameCountToStream   =  subBufferSizeInFrames ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  frameCountToStream  =  frames Left;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        switch  ( music . ctxType )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1690,8 +1684,8 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_AUDIO_WAV :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  Returns  the  number  of  samples  to  process  ( not  required )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( music . stream . sampleSize  = =  16 )  drwav_read_pcm_frames_s16 ( ( drwav  * ) music . ctxData ,  samplesCount / music . stream . channels ,  ( short  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( music . stream . sampleSize  = =  32 )  drwav_read_pcm_frames_f32 ( ( drwav  * ) music . ctxData ,  samplesCount / music . stream . channels ,  ( float  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( music . stream . sampleSize  = =  16 )  drwav_read_pcm_frames_s16 ( ( drwav  * ) music . ctxData ,  frameCountToStream ,  ( short  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( music . stream . sampleSize  = =  32 )  drwav_read_pcm_frames_f32 ( ( drwav  * ) music . ctxData ,  frameCountToStream ,  ( float  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1699,7 +1693,7 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_AUDIO_OGG :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  Returns  the  number  of  samples  to  process  ( be  careful !  we  ask  for  number  of  shorts ! )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                stb_vorbis_get_samples_short_interleaved ( ( stb_vorbis  * ) music . ctxData ,  music . stream . channels ,  ( short  * ) pcm ,  samplesCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                stb_vorbis_get_samples_short_interleaved ( ( stb_vorbis  * ) music . ctxData ,  music . stream . channels ,  ( short  * ) pcm ,  frameCountToStream * music . stream . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1707,15 +1701,14 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_AUDIO_FLAC :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  Returns  the  number  of  samples  to  process  ( not  required )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                drflac_read_pcm_frames_s16 ( ( drflac  * ) music . ctxData ,  samplesCount ,  ( short  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                drflac_read_pcm_frames_s16 ( ( drflac  * ) music . ctxData ,  frameCountToStream * music . stream . channels ,  ( short  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # if defined(SUPPORT_FILEFORMAT_MP3)   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_AUDIO_MP3 :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  samplesCount ,  actually  refers  to  framesCount  and  returns  the  number  of  frames  processed   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                drmp3_read_pcm_frames_f32 ( ( drmp3  * ) music . ctxData ,  samplesCount / music . stream . channels ,  ( float  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                drmp3_read_pcm_frames_f32 ( ( drmp3  * ) music . ctxData ,  frameCountToStream ,  ( float  * ) pcm ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1723,9 +1716,9 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_MODULE_XM :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  Internally  we  consider  2  channels  generation ,  so  samplesCount / 2   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_f32 )  jar_xm_generate_samples ( ( jar_xm_context_t  * ) music . ctxData ,  ( float  * ) pcm ,  samplesCount / 2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_s16 )  jar_xm_generate_samples_16bit ( ( jar_xm_context_t  * ) music . ctxData ,  ( short  * ) pcm ,  samplesCount / 2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_u8 )  jar_xm_generate_samples_8bit ( ( jar_xm_context_t  * ) music . ctxData ,  ( char  * ) pcm ,  samplesCount / 2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_f32 )  jar_xm_generate_samples ( ( jar_xm_context_t  * ) music . ctxData ,  ( float  * ) pcm ,  frameCountToStream ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_s16 )  jar_xm_generate_samples_16bit ( ( jar_xm_context_t  * ) music . ctxData ,  ( short  * ) pcm ,  frameCountToStream ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                else  if  ( AUDIO_DEVICE_FORMAT  = =  ma_format_u8 )  jar_xm_generate_samples_8bit ( ( jar_xm_context_t  * ) music . ctxData ,  ( char  * ) pcm ,  frameCountToStream ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1733,22 +1726,17 @@ void UpdateMusicStream(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            case  MUSIC_MODULE_MOD :   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  NOTE :  3 rd  parameter  ( nbsample )  specify  the  number  of  stereo  16 bits  samples  you  want ,  so  sampleCount / 2   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                jar_mod_fillbuffer ( ( jar_mod_context_t  * ) music . ctxData ,  ( short  * ) pcm ,  samplesCount / 2 ,  0 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                jar_mod_fillbuffer ( ( jar_mod_context_t  * ) music . ctxData ,  ( short  * ) pcm ,  frameCountToStream ,  0 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        # endif   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            default :  break ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        UpdateAudioStream ( music . stream ,  pcm ,  samplesCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        UpdateAudioStream ( music . stream ,  pcm ,  frameCountToStream ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			          
			
		 
		
	
		
			
			 
			 
			
			 
			
			        framesLeft  - =  frameCountToStream ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( ( music . ctxType  = =  MUSIC_MODULE_XM )  | |  music . ctxType  = =  MUSIC_MODULE_MOD )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( samplesCount  >  1 )  sampleLeft  - =  samplesCount / 2 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            else  sampleLeft  - =  samplesCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  sampleLeft  - =  samplesCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( sampleLeft  < =  0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( framesLeft  < =  0 )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            streamEnding  =  true ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            break ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1795,7 +1783,7 @@ float GetMusicTimeLength(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  totalSeconds  =  0.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    totalSeconds  =  ( float ) music . sampleCount / ( music . stream . sampleRate* music . stream . channels )  ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    totalSeconds  =  ( float ) music . frameCount / music . stream . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    return  totalSeconds ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			}  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -1803,22 +1791,24 @@ float GetMusicTimeLength(Music music)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  Get  current  music  time  played  ( in  seconds )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			float  GetMusicTimePlayed ( Music  music )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			# if defined(SUPPORT_FILEFORMAT_XM)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( music . ctxType  = =  MUSIC_MODULE_XM )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        uint64_t  samples  =  0 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        jar_xm_get_position ( music . ctxData ,  NULL ,  NULL ,  NULL ,  & samples ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        samples  =  samples  %  ( music . sampleCount ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        return  ( float ) ( samples ) / ( music . stream . sampleRate * music . stream . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			# endif  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  secondsPlayed  =  0.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( music . stream . buffer  ! =  NULL )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / ma_uint32  frameSizeInBytes  =  ma_get_bytes_per_sample ( music . stream . buffer - > dsp . formatConverterIn . config . formatIn ) * music . stream . buffer - > dsp . formatConverterIn . config . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        unsigned  int  samplesPlayed  =  music . stream . buffer - > framesProcessed * music . stream . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        secondsPlayed  =  ( float ) samplesPlayed / ( music . stream . sampleRate * music . stream . channels ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    # if defined(SUPPORT_FILEFORMAT_XM)   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( music . ctxType  = =  MUSIC_MODULE_XM )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            uint64_t  framesPlayed  =  0 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            jar_xm_get_position ( music . ctxData ,  NULL ,  NULL ,  NULL ,  & framesPlayed ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            secondsPlayed  =  ( float ) framesPlayed / music . stream . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    # endif   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / / ma_uint32  frameSizeInBytes  =  ma_get_bytes_per_sample ( music . stream . buffer - > dsp . formatConverterIn . config . formatIn ) * music . stream . buffer - > dsp . formatConverterIn . config . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            unsigned  int  framesPlayed  =  music . stream . buffer - > framesProcessed ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            secondsPlayed  =  ( float ) framesPlayed / music . stream . sampleRate ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    return  secondsPlayed ;   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1867,7 +1857,7 @@ void UnloadAudioStream(AudioStream stream)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  Update  audio  stream  buffers  with  data  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  NOTE  1 :  Only  updates  one  buffer  of  the  stream  source :  unqueue  - >  update  - >  queue  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  NOTE  2 :  To  unqueue  a  buffer  it  needs  to  be  processed :  IsAudioStreamProcessed ( )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			void  UpdateAudioStream ( AudioStream  stream ,  const  void  * data ,  int  samples Count)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			void  UpdateAudioStream ( AudioStream  stream ,  const  void  * data ,  int  frame Count)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    if  ( stream . buffer  ! =  NULL )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -1896,11 +1886,11 @@ void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Does  this  API  expect  a  whole  buffer  to  be  updated  in  one  go ?   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Assuming  so ,  but  if  not  will  need  to  change  this  logic .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( subBufferSizeInFrames  > =  ( ma_uint32 ) samplesCount / stream . channels )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( subBufferSizeInFrames  > =  ( ma_uint32 ) frameCount )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                ma_uint32  framesToWrite  =  subBufferSizeInFrames ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( framesToWrite  >  ( p">( ma_uint32 ) samplesCount / stream . channels ) )  framesToWrite  =  ( ma_uint32 ) samplesCount / stream . channels ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( framesToWrite  >  ( ma_uint32 ) frameCount )  framesToWrite  =  ( ma_uint32 ) frameCount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                ma_uint32  bytesToWrite  =  framesToWrite * stream . channels * ( stream . sampleSize / 8 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                memcpy ( subBuffer ,  data ,  bytesToWrite ) ;