diff --git a/src/audio.c b/src/audio.c index f3db11245..fc65127bf 100644 --- a/src/audio.c +++ b/src/audio.c @@ -1463,21 +1463,25 @@ Music LoadMusicStream(const char *fileName) #if defined(SUPPORT_FILEFORMAT_MP3) else if (IsFileExtension(fileName, ".mp3")) { - drmp3_init_file(&music->ctxMp3, fileName, NULL); + int result = drmp3_init_file(&music->ctxMp3, fileName, NULL); - if (music->ctxMp3.framesRemaining <= 0) musicLoaded = false; + if (!result) musicLoaded = false; else { - music->stream = InitAudioStream(music->ctxMp3.sampleRate, 16, music->ctxMp3.channels); + TraceLog(LOG_INFO, "[%s] MP3 sample rate: %i", fileName, music->ctxMp3.sampleRate); + TraceLog(LOG_INFO, "[%s] MP3 bits per sample: %i", fileName, 32); + TraceLog(LOG_INFO, "[%s] MP3 channels: %i", fileName, music->ctxMp3.channels); + TraceLog(LOG_INFO, "[%s] MP3 frames remaining: %i", fileName, (unsigned int)music->ctxMp3.framesRemaining); + + music->stream = InitAudioStream(music->ctxMp3.sampleRate, 32, music->ctxMp3.channels); + + // TODO: It seems the total number of samples is not obtained correctly... music->totalSamples = (unsigned int)music->ctxMp3.framesRemaining*music->ctxMp3.channels; music->samplesLeft = music->totalSamples; music->ctxType = MUSIC_AUDIO_MP3; music->loopCount = -1; // Infinite loop by default - - TraceLog(LOG_DEBUG, "[%s] MP3 total samples: %i", fileName, music->totalSamples); - TraceLog(LOG_DEBUG, "[%s] MP3 sample rate: %i", fileName, music->ctxMp3.sampleRate); - //TraceLog(LOG_DEBUG, "[%s] MP3 bits per sample: %i", fileName, music->ctxMp3.bitsPerSample); - TraceLog(LOG_DEBUG, "[%s] MP3 channels: %i", fileName, music->ctxMp3.channels); + + TraceLog(LOG_INFO, "[%s] MP3 total samples: %i", fileName, music->totalSamples); } } #endif @@ -1940,7 +1944,7 @@ AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize, un mal_format formatIn = ((stream.sampleSize == 8) ? mal_format_u8 : ((stream.sampleSize == 16) ? mal_format_s16 : mal_format_f32)); // The size of a streaming buffer must be at least double the size of a period. - unsigned int periodSize = device.bufferSizeInFrames / device.periods; + unsigned int periodSize = device.bufferSizeInFrames/device.periods; unsigned int subBufferSize = AUDIO_BUFFER_SIZE; if (subBufferSize < periodSize) subBufferSize = periodSize; @@ -1951,7 +1955,7 @@ AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize, un return stream; } - audioBuffer->looping = true; // Always loop for streaming buffers. + audioBuffer->looping = true; // Always loop for streaming buffers. stream.audioBuffer = audioBuffer; #else // Setup OpenAL format @@ -2398,17 +2402,17 @@ static Wave LoadFLAC(const char *fileName) // NOTE: Using dr_mp3 library static Wave LoadMP3(const char *fileName) { - Wave wave; + Wave wave = { 0 }; // Decode an entire MP3 file in one go - uint64_t totalSampleCount; - drmp3_config *config = NULL; - wave.data = drmp3_open_and_decode_file_f32(fileName, config, &totalSampleCount); + uint64_t totalSampleCount = 0; + drmp3_config config = { 0 }; + wave.data = drmp3_open_and_decode_file_f32(fileName, &config, &totalSampleCount); - wave.channels = config->outputChannels; - wave.sampleRate = config->outputSampleRate; - wave.sampleCount = (int)totalSampleCount/wave.channels; - wave.sampleSize = 16; + wave.channels = config.outputChannels; + wave.sampleRate = config.outputSampleRate; + wave.sampleCount = (int)totalSampleCount; + wave.sampleSize = 32; // NOTE: Only support up to 2 channels (mono, stereo) if (wave.channels > 2) TraceLog(LOG_WARNING, "[%s] MP3 channels number (%i) not supported", fileName, wave.channels);