Avoid crashing if music file not loaded
This commit is contained in:
parent
d5735720b0
commit
63f9f91ea8
1 changed files with 39 additions and 24 deletions
29
src/audio.c
29
src/audio.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue