@ -1575,7 +1575,11 @@ void StopMusicStream(Music music)
/ / Update ( re - fill ) music buffers if data already processed
void UpdateMusicStream ( Music music )
{
if ( music . stream . buffer = = NULL ) return ;
if ( music . stream . buffer = = NULL )
return ;
if ( music . ctxType = = MUSIC_MODULE_XM )
jar_xm_set_max_loop_count ( music . ctxData , music . looping ? 0 : 1 ) ;
bool streamEnding = false ;
@ -1590,6 +1594,8 @@ void UpdateMusicStream(Music music)
/ / 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 - > totalFramesProcessed * music . stream . channels ) ;
if ( music . ctxType = = MUSIC_MODULE_XM & & music . looping ) sampleLeft = subBufferSizeInFrames * 4 ;
while ( IsAudioStreamProcessed ( music . stream ) )
{
if ( ( sampleLeft / music . stream . channels ) > = subBufferSizeInFrames ) samplesCount = subBufferSizeInFrames * music . stream . channels ;
@ -1649,10 +1655,10 @@ void UpdateMusicStream(Music music)
UpdateAudioStream ( music . stream , pcm , samplesCount ) ;
if ( ( music . ctxType = = MUSIC_MODULE_XM ) | | p">( music . ctxType = = MUSIC_MODULE_MOD) )
if ( ( music . ctxType = = MUSIC_MODULE_XM ) | | music . ctxType = = MUSIC_MODULE_MOD )
{
if ( samplesCount > 1 ) sampleLeft - = samplesCount / 2 ;
else sampleLeft - = samplesCount ;
if ( samplesCount > 1 ) sampleLeft - = samplesCount / 2 ;
else sampleLeft - = samplesCount ;
}
else sampleLeft - = samplesCount ;
@ -1711,8 +1717,17 @@ 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 ;