diff options
| author | Uneven Prankster <[email protected]> | 2021-09-22 16:55:13 -0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-22 21:55:13 +0200 |
| commit | 19ef765382438432eb3c1e3a6dd9271fe9c023c9 (patch) | |
| tree | a26a8275913079669906da18d2b900fc50a03351 /src | |
| parent | 9607ea5c0a28d1a3f5812c6fdc4822ab4b48cde2 (diff) | |
| download | raylib-19ef765382438432eb3c1e3a6dd9271fe9c023c9.tar.gz raylib-19ef765382438432eb3c1e3a6dd9271fe9c023c9.zip | |
`SeekMusicStream` initial implementation (#2006)
Diffstat (limited to 'src')
| -rw-r--r-- | src/raudio.c | 22 | ||||
| -rw-r--r-- | src/raudio.h | 1 | ||||
| -rw-r--r-- | src/raylib.h | 1 |
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) |
