aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2017-02-06 01:03:58 +0100
committerRay <raysan5@gmail.com>2017-02-06 01:03:58 +0100
commitf2f05a734d4999ffdc19629c838f46914650bbd0 (patch)
tree02e1e0cb1c4b2c903fa84d5307d74e3e59f49807 /src
parentac6b4d3830b1ed1a1446ecb57009456306ef008d (diff)
downloadraylib-f2f05a734d4999ffdc19629c838f46914650bbd0.tar.gz
raylib-f2f05a734d4999ffdc19629c838f46914650bbd0.zip
Added audio function: SetMusicLoopCount()
Useful to set number of repeats for a music, needs to be tested...
Diffstat (limited to 'src')
-rw-r--r--src/audio.c27
-rw-r--r--src/raylib.h1
2 files changed, 21 insertions, 7 deletions
diff --git a/src/audio.c b/src/audio.c
index e669eceb..5a5b008f 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -123,7 +123,7 @@ typedef struct MusicData {
AudioStream stream; // Audio stream (double buffering)
- bool loop; // Repeat music after finish (loop)
+ int loopCount; // Loops count (times music repeats), -1 means infinite loop
unsigned int totalSamples; // Total number of samples
unsigned int samplesLeft; // Number of samples left to end
} MusicData;
@@ -632,7 +632,7 @@ Music LoadMusicStream(const char *fileName)
music->totalSamples = (unsigned int)stb_vorbis_stream_length_in_samples(music->ctxOgg); // Independent by channel
music->samplesLeft = music->totalSamples;
music->ctxType = MUSIC_AUDIO_OGG;
- music->loop = true; // We loop by default
+ music->loopCount = -1; // Infinite loop by default
TraceLog(DEBUG, "[%s] FLAC total samples: %i", fileName, music->totalSamples);
TraceLog(DEBUG, "[%s] OGG sample rate: %i", fileName, info.sample_rate);
@@ -651,7 +651,7 @@ Music LoadMusicStream(const char *fileName)
music->totalSamples = (unsigned int)music->ctxFlac->totalSampleCount/music->ctxFlac->channels;
music->samplesLeft = music->totalSamples;
music->ctxType = MUSIC_AUDIO_FLAC;
- music->loop = true; // We loop by default
+ music->loopCount = -1; // Infinite loop by default
TraceLog(DEBUG, "[%s] FLAC total samples: %i", fileName, music->totalSamples);
TraceLog(DEBUG, "[%s] FLAC sample rate: %i", fileName, music->ctxFlac->sampleRate);
@@ -665,14 +665,14 @@ Music LoadMusicStream(const char *fileName)
if (!result) // XM context created successfully
{
- jar_xm_set_max_loop_count(music->ctxXm, 0); // Set infinite number of loops
+ jar_xm_set_max_loop_count(music->ctxXm, 0); // Set infinite number of loops
// NOTE: Only stereo is supported for XM
music->stream = InitAudioStream(48000, 16, 2);
music->totalSamples = (unsigned int)jar_xm_get_remaining_samples(music->ctxXm);
music->samplesLeft = music->totalSamples;
music->ctxType = MUSIC_MODULE_XM;
- music->loop = true;
+ music->loopCount = -1; // Infinite loop by default
TraceLog(DEBUG, "[%s] XM number of samples: %i", fileName, music->totalSamples);
TraceLog(DEBUG, "[%s] XM track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f);
@@ -689,7 +689,7 @@ Music LoadMusicStream(const char *fileName)
music->totalSamples = (unsigned int)jar_mod_max_samples(&music->ctxMod);
music->samplesLeft = music->totalSamples;
music->ctxType = MUSIC_MODULE_MOD;
- music->loop = true;
+ music->loopCount = -1; // Infinite loop by default
TraceLog(DEBUG, "[%s] MOD number of samples: %i", fileName, music->samplesLeft);
TraceLog(DEBUG, "[%s] MOD track length: %11.6f sec", fileName, (float)music->totalSamples/48000.0f);
@@ -813,7 +813,13 @@ void UpdateMusicStream(Music music)
if (!active)
{
StopMusicStream(music); // Stop music (and reset)
- if (music->loop) PlayMusicStream(music); // Play again
+
+ // Decrease loopCount to stop when required
+ if (music->loopCount > 0)
+ {
+ music->loopCount--; // Decrease loop count
+ PlayMusicStream(music); // Play again
+ }
}
else
{
@@ -851,6 +857,13 @@ void SetMusicPitch(Music music, float pitch)
alSourcef(music->stream.source, AL_PITCH, pitch);
}
+// Set music loop count (loop repeats)
+// NOTE: If set to -1, means infinite loop
+void SetMusicLoopCount(Music music, float count);
+{
+ music->loopCount = count;
+}
+
// Get music time length (in seconds)
float GetMusicTimeLength(Music music)
{
diff --git a/src/raylib.h b/src/raylib.h
index 85cad6c3..907ef1e9 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -977,6 +977,7 @@ RLAPI void ResumeMusicStream(Music music); // Resume
RLAPI bool IsMusicPlaying(Music music); // Check if music is playing
RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level)
RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level)
+RLAPI void SetMusicLoopCount(Music music, float count); // Set music loop count (loop repeats)
RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds)
RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds)