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; } }