Avoid crashing if music file not loaded

This commit is contained in:
raysan5 2019-01-02 14:05:20 +01:00
parent d5735720b0
commit 63f9f91ea8

View file

@ -1219,6 +1219,8 @@ Music LoadMusicStream(const char *fileName)
// Unload music stream // Unload music stream
void UnloadMusicStream(Music music) void UnloadMusicStream(Music music)
{ {
if (music == NULL) return;
CloseAudioStream(music->stream); CloseAudioStream(music->stream);
if (music->ctxType == MUSIC_AUDIO_OGG) stb_vorbis_close(music->ctxOgg); if (music->ctxType == MUSIC_AUDIO_OGG) stb_vorbis_close(music->ctxOgg);
@ -1241,6 +1243,8 @@ void UnloadMusicStream(Music music)
// Start music playing (open stream) // Start music playing (open stream)
void PlayMusicStream(Music music) void PlayMusicStream(Music music)
{ {
if (music != NULL)
{
AudioBuffer *audioBuffer = (AudioBuffer *)music->stream.audioBuffer; AudioBuffer *audioBuffer = (AudioBuffer *)music->stream.audioBuffer;
if (audioBuffer == NULL) if (audioBuffer == NULL)
@ -1258,24 +1262,27 @@ void PlayMusicStream(Music music)
PlayAudioStream(music->stream); // <-- This resets the cursor position. PlayAudioStream(music->stream); // <-- This resets the cursor position.
audioBuffer->frameCursorPos = frameCursorPos; audioBuffer->frameCursorPos = frameCursorPos;
}
} }
// Pause music playing // Pause music playing
void PauseMusicStream(Music music) void PauseMusicStream(Music music)
{ {
PauseAudioStream(music->stream); if (music != NULL) PauseAudioStream(music->stream);
} }
// Resume music playing // Resume music playing
void ResumeMusicStream(Music music) void ResumeMusicStream(Music music)
{ {
ResumeAudioStream(music->stream); if (music != NULL) ResumeAudioStream(music->stream);
} }
// Stop music playing (close stream) // Stop music playing (close stream)
// TODO: To clear a buffer, make sure they have been already processed! // TODO: To clear a buffer, make sure they have been already processed!
void StopMusicStream(Music music) void StopMusicStream(Music music)
{ {
if (music == NULL) return;
StopAudioStream(music->stream); StopAudioStream(music->stream);
// Restart music context // Restart music context
@ -1304,6 +1311,8 @@ void StopMusicStream(Music music)
// TODO: Make sure buffers are ready for update... check music state // TODO: Make sure buffers are ready for update... check music state
void UpdateMusicStream(Music music) void UpdateMusicStream(Music music)
{ {
if (music == NULL) return;
bool streamEnding = false; bool streamEnding = false;
unsigned int subBufferSizeInFrames = ((AudioBuffer *)music->stream.audioBuffer)->bufferSizeInFrames/2; unsigned int subBufferSizeInFrames = ((AudioBuffer *)music->stream.audioBuffer)->bufferSizeInFrames/2;
@ -1406,32 +1415,35 @@ void UpdateMusicStream(Music music)
// Check if any music is playing // Check if any music is playing
bool IsMusicPlaying(Music music) bool IsMusicPlaying(Music music)
{ {
return IsAudioStreamPlaying(music->stream); if (music == NULL) return false;
else return IsAudioStreamPlaying(music->stream);
} }
// Set volume for music // Set volume for music
void SetMusicVolume(Music music, float volume) void SetMusicVolume(Music music, float volume)
{ {
SetAudioStreamVolume(music->stream, volume); if (music != NULL) SetAudioStreamVolume(music->stream, volume);
} }
// Set pitch for music // Set pitch for music
void SetMusicPitch(Music music, float pitch) void SetMusicPitch(Music music, float pitch)
{ {
SetAudioStreamPitch(music->stream, pitch); if (music != NULL) SetAudioStreamPitch(music->stream, pitch);
} }
// Set music loop count (loop repeats) // Set music loop count (loop repeats)
// NOTE: If set to -1, means infinite loop // NOTE: If set to -1, means infinite loop
void SetMusicLoopCount(Music music, int count) void SetMusicLoopCount(Music music, int count)
{ {
music->loopCount = count; if (music != NULL) music->loopCount = count;
} }
// Get music time length (in seconds) // Get music time length (in seconds)
float GetMusicTimeLength(Music music) float GetMusicTimeLength(Music music)
{ {
float totalSeconds = (float)music->totalSamples/(music->stream.sampleRate*music->stream.channels); float totalSeconds = 0.0f;
if (music != NULL) totalSeconds = (float)music->totalSamples/(music->stream.sampleRate*music->stream.channels);
return totalSeconds; return totalSeconds;
} }
@ -1441,8 +1453,11 @@ float GetMusicTimePlayed(Music music)
{ {
float secondsPlayed = 0.0f; float secondsPlayed = 0.0f;
if (music != NULL)
{
unsigned int samplesPlayed = music->totalSamples - music->samplesLeft; unsigned int samplesPlayed = music->totalSamples - music->samplesLeft;
secondsPlayed = (float)samplesPlayed/(music->stream.sampleRate*music->stream.channels); secondsPlayed = (float)samplesPlayed/(music->stream.sampleRate*music->stream.channels);
}
return secondsPlayed; return secondsPlayed;
} }