summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorUneven Prankster <[email protected]>2021-09-22 16:55:13 -0300
committerGitHub <[email protected]>2021-09-22 21:55:13 +0200
commit19ef765382438432eb3c1e3a6dd9271fe9c023c9 (patch)
treea26a8275913079669906da18d2b900fc50a03351 /src
parent9607ea5c0a28d1a3f5812c6fdc4822ab4b48cde2 (diff)
downloadraylib-19ef765382438432eb3c1e3a6dd9271fe9c023c9.tar.gz
raylib-19ef765382438432eb3c1e3a6dd9271fe9c023c9.zip
`SeekMusicStream` initial implementation (#2006)
Diffstat (limited to 'src')
-rw-r--r--src/raudio.c22
-rw-r--r--src/raudio.h1
-rw-r--r--src/raylib.h1
3 files changed, 24 insertions, 0 deletions
diff --git a/src/raudio.c b/src/raudio.c
index 7c4e9ca3..d05d1496 100644
--- a/src/raudio.c
+++ b/src/raudio.c
@@ -1656,6 +1656,28 @@ void StopMusicStream(Music music)
}
}
+// Seek music to a certain position (in seconds)
+void SeekMusicStream(Music music, float position)
+{
+ unsigned int positionInFrames = (unsigned int)(position * music.stream.sampleRate);
+ switch (music.ctxType)
+ {
+#if defined(SUPPORT_FILEFORMAT_WAV)
+ case MUSIC_AUDIO_WAV: drwav_seek_to_pcm_frame((drwav *)music.ctxData, positionInFrames); break;
+#endif
+#if defined(SUPPORT_FILEFORMAT_OGG)
+ case MUSIC_AUDIO_OGG: stb_vorbis_seek_frame((stb_vorbis *)music.ctxData, positionInFrames); break;
+#endif
+#if defined(SUPPORT_FILEFORMAT_FLAC)
+ case MUSIC_AUDIO_FLAC: drflac_seek_to_pcm_frame((drflac *)music.ctxData, positionInFrames); break;
+#endif
+#if defined(SUPPORT_FILEFORMAT_MP3)
+ case MUSIC_AUDIO_MP3: drmp3_seek_to_pcm_frame((drmp3 *)music.ctxData, positionInFrames); break;
+#endif
+ default: break;
+ }
+}
+
// Update (re-fill) music buffers if data already processed
void UpdateMusicStream(Music music)
{
diff --git a/src/raudio.h b/src/raudio.h
index cddb3568..7e3c42f4 100644
--- a/src/raudio.h
+++ b/src/raudio.h
@@ -171,6 +171,7 @@ void UpdateMusicStream(Music music); // Updates buffe
void StopMusicStream(Music music); // Stop music playing
void PauseMusicStream(Music music); // Pause music playing
void ResumeMusicStream(Music music); // Resume playing paused music
+void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds)
void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level)
void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level)
float GetMusicTimeLength(Music music); // Get music time length (in seconds)
diff --git a/src/raylib.h b/src/raylib.h
index 83e84a4f..8a9fe80b 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1501,6 +1501,7 @@ RLAPI void UpdateMusicStream(Music music); // Updates
RLAPI void StopMusicStream(Music music); // Stop music playing
RLAPI void PauseMusicStream(Music music); // Pause music playing
RLAPI void ResumeMusicStream(Music music); // Resume playing paused music
+RLAPI void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds)
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 float GetMusicTimeLength(Music music); // Get music time length (in seconds)