diff options
| -rw-r--r-- | .travis.yml | 6 | ||||
| -rw-r--r-- | src/audio.c | 59 | ||||
| -rw-r--r-- | src/utils.c | 10 |
3 files changed, 46 insertions, 29 deletions
diff --git a/.travis.yml b/.travis.yml index c27b6582..74ad8e8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ matrix: env: ARCH=amd64 INSTALL_GLFW=YES USE_EXTERNAL_GLFW=OFF sudo: required - os: linux - env: ARCH=amd64 INSTALL_GLFW=YES OPENAL=ON STATIC=OFF RELEASE=NO + env: ARCH=amd64 INSTALL_GLFW=YES STATIC=OFF RELEASE=NO sudo: required - os: linux env: WAYLAND=ON ARCH=amd64 RELEASE=NO @@ -42,6 +42,9 @@ matrix: - os: linux env: ARCH=html5 RELEASE=NO sudo: required + - os: windows + compiler: gcc + env: ARCH=i386 SHARED=OFF RELEASE=NO before_script: @@ -49,7 +52,6 @@ before_install: - if [ -z "$USE_EXTERNAL_GLFW" ]; then export USE_EXTERNAL_GLFW=IF_POSSIBLE; fi - if [ -z "$SHARED" ]; then export SHARED=ON ; fi - if [ -z "$STATIC" ]; then export STATIC=ON ; fi - - if [ -z "$OPENAL" ]; then export OPENAL=OFF; fi - if [[ "$INSTALL_GLFW" == "YES" && "$USE_EXTERNAL_GLFW" != "OFF" ]]; then export DONT_TEST=1; fi diff --git a/src/audio.c b/src/audio.c index 00e28f2a..a76481b4 100644 --- a/src/audio.c +++ b/src/audio.c @@ -1219,6 +1219,8 @@ Music LoadMusicStream(const char *fileName) // Unload music stream void UnloadMusicStream(Music music) { + if (music == NULL) return; + CloseAudioStream(music->stream); if (music->ctxType == MUSIC_AUDIO_OGG) stb_vorbis_close(music->ctxOgg); @@ -1241,41 +1243,46 @@ void UnloadMusicStream(Music music) // Start music playing (open stream) void PlayMusicStream(Music music) { - AudioBuffer *audioBuffer = (AudioBuffer *)music->stream.audioBuffer; - - if (audioBuffer == NULL) + if (music != NULL) { - TraceLog(LOG_ERROR, "PlayMusicStream() : No audio buffer"); - return; - } + AudioBuffer *audioBuffer = (AudioBuffer *)music->stream.audioBuffer; - // For music streams, we need to make sure we maintain the frame cursor position. This is hack for this section of code in UpdateMusicStream() - // // NOTE: In case window is minimized, music stream is stopped, - // // just make sure to play again on window restore - // if (IsMusicPlaying(music)) PlayMusicStream(music); - mal_uint32 frameCursorPos = audioBuffer->frameCursorPos; + if (audioBuffer == NULL) + { + TraceLog(LOG_ERROR, "PlayMusicStream() : No audio buffer"); + return; + } + + // For music streams, we need to make sure we maintain the frame cursor position. This is hack for this section of code in UpdateMusicStream() + // // NOTE: In case window is minimized, music stream is stopped, + // // just make sure to play again on window restore + // if (IsMusicPlaying(music)) PlayMusicStream(music); + mal_uint32 frameCursorPos = audioBuffer->frameCursorPos; - 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 void PauseMusicStream(Music music) { - PauseAudioStream(music->stream); + if (music != NULL) PauseAudioStream(music->stream); } // Resume music playing void ResumeMusicStream(Music music) { - ResumeAudioStream(music->stream); + if (music != NULL) ResumeAudioStream(music->stream); } // Stop music playing (close stream) // TODO: To clear a buffer, make sure they have been already processed! void StopMusicStream(Music music) { + if (music == NULL) return; + StopAudioStream(music->stream); // Restart music context @@ -1304,6 +1311,8 @@ void StopMusicStream(Music music) // TODO: Make sure buffers are ready for update... check music state void UpdateMusicStream(Music music) { + if (music == NULL) return; + bool streamEnding = false; unsigned int subBufferSizeInFrames = ((AudioBuffer *)music->stream.audioBuffer)->bufferSizeInFrames/2; @@ -1406,32 +1415,35 @@ void UpdateMusicStream(Music music) // Check if any music is playing bool IsMusicPlaying(Music music) { - return IsAudioStreamPlaying(music->stream); + if (music == NULL) return false; + else return IsAudioStreamPlaying(music->stream); } // Set volume for music void SetMusicVolume(Music music, float volume) { - SetAudioStreamVolume(music->stream, volume); + if (music != NULL) SetAudioStreamVolume(music->stream, volume); } // Set pitch for music void SetMusicPitch(Music music, float pitch) { - SetAudioStreamPitch(music->stream, pitch); + if (music != NULL) SetAudioStreamPitch(music->stream, pitch); } // Set music loop count (loop repeats) // NOTE: If set to -1, means infinite loop void SetMusicLoopCount(Music music, int count) { - music->loopCount = count; + if (music != NULL) music->loopCount = count; } // Get music time length (in seconds) 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; } @@ -1441,8 +1453,11 @@ float GetMusicTimePlayed(Music music) { float secondsPlayed = 0.0f; - unsigned int samplesPlayed = music->totalSamples - music->samplesLeft; - secondsPlayed = (float)samplesPlayed/(music->stream.sampleRate*music->stream.channels); + if (music != NULL) + { + unsigned int samplesPlayed = music->totalSamples - music->samplesLeft; + secondsPlayed = (float)samplesPlayed/(music->stream.sampleRate*music->stream.channels); + } return secondsPlayed; } diff --git a/src/utils.c b/src/utils.c index b2951040..e891ef72 100644 --- a/src/utils.c +++ b/src/utils.c @@ -46,11 +46,6 @@ #include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end() #include <string.h> // Required for: strlen(), strrchr(), strcmp() -/* This should be in <stdio.h>, but Travis doesn't find it... */ -FILE *funopen(const void *cookie, int (*readfn)(void *, char *, int), - int (*writefn)(void *, const char *, int), - fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *)); - //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- @@ -67,6 +62,11 @@ AAssetManager *assetManager; // Module specific Functions Declaration //---------------------------------------------------------------------------------- #if defined(PLATFORM_ANDROID) +/* This should be in <stdio.h>, but Travis doesn't find it... */ +FILE *funopen(const void *cookie, int (*readfn)(void *, char *, int), + int (*writefn)(void *, const char *, int), + fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *)); + static int android_read(void *cookie, char *buf, int size); static int android_write(void *cookie, const char *buf, int size); static fpos_t android_seek(void *cookie, fpos_t offset, int whence); |
