From 33bee6ce44d2610ef8061ee40b234ae95be0555d Mon Sep 17 00:00:00 2001 From: Nevyn Bengtsson Date: Fri, 3 Jan 2020 23:00:58 +0100 Subject: [PATCH] Audio: Rewind on play, not stop Before, streams were rewound when they stopped, so that next time they're played they're played from the start. Instead, rewind on play instead, so that it's done when it's needed. This gets us a good point to make sure we're not rewinding raw streams too. --- src/modules/audio/audio.c | 1 - src/modules/audio/source.c | 9 ++++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/audio/audio.c b/src/modules/audio/audio.c index 337010fc..9105ae49 100644 --- a/src/modules/audio/audio.c +++ b/src/modules/audio/audio.c @@ -95,7 +95,6 @@ void lovrAudioUpdate() { alSourcePlay(id); } } else if (isStopped) { - lovrAudioStreamRewind(lovrSourceGetStream(source)); arr_splice(&state.sources, i, 1); lovrRelease(Source, source); } diff --git a/src/modules/audio/source.c b/src/modules/audio/source.c index ab9a90cf..8b7b2114 100644 --- a/src/modules/audio/source.c +++ b/src/modules/audio/source.c @@ -165,6 +165,11 @@ void lovrSourcePlay(Source* source) { return; } + // in case we're replaying an already-used stream, make sure to rewind it if applicable + if (!lovrAudioStreamIsRaw(source->stream)) { + lovrAudioStreamRewind(source->stream); + } + lovrSourceStream(source, source->buffers, SOURCE_BUFFERS); alSourcePlay(source->id); } @@ -285,7 +290,9 @@ void lovrSourceStop(Source* source) { alSourcei(source->id, AL_BUFFER, AL_NONE); // Rewind the decoder - lovrAudioStreamRewind(source->stream); + if (!lovrAudioStreamIsRaw(source->stream)) { + lovrAudioStreamRewind(source->stream); + } break; } }