fix bug with SetLoop while Playing

main
cosmonaut 2021-11-16 00:24:49 -08:00
parent 3568028dc3
commit 1d3c0dcbc8
1 changed files with 15 additions and 3 deletions

View File

@ -341,9 +341,16 @@ static void FAudioGMS_INTERNAL_OnBufferEndCallback(
uint32_t i; uint32_t i;
if (instance->isStatic) if (instance->isStatic)
{
FAudioVoiceState state;
FAudioSourceVoice_GetState(instance->voice.handle, &state, 0);
/* We don't want to stop if we re-queued sound for SetLoop or something so we check that we're actually done */
if (state.BuffersQueued == 0)
{ {
FAudioGMS_INTERNAL_SoundInstance_Stop(instance); FAudioGMS_INTERNAL_SoundInstance_Stop(instance);
} }
}
else else
{ {
if (instance->soundData.streamingSound.isFinalBuffer) if (instance->soundData.streamingSound.isFinalBuffer)
@ -810,6 +817,8 @@ static FAudioGMS_SoundInstance *FAudioGMS_INTERNAL_SoundInstance_CreateFromStati
instance->isStatic = 1; instance->isStatic = 1;
instance->soundData.staticSound = staticSound; instance->soundData.staticSound = staticSound;
instance->playLength = instance->soundData.staticSound->buffer.PlayLength;
return instance; return instance;
} }
@ -1057,6 +1066,8 @@ double FAudioGMS_StreamingSound_LoadOGG(char *filePath)
instance->soundData.streamingSound.mostRecentBufferOffset = 0; instance->soundData.streamingSound.mostRecentBufferOffset = 0;
instance->soundData.streamingSound.isFinalBuffer = 0; instance->soundData.streamingSound.isFinalBuffer = 0;
instance->playLength = stb_vorbis_stream_length_in_samples(fileHandle);
FAudioGMS_INTERNAL_SoundInstance_AddBuffer(instance); FAudioGMS_INTERNAL_SoundInstance_AddBuffer(instance);
return instance->id; return instance->id;
@ -1133,11 +1144,12 @@ static void FAudioGMS_INTERNAL_SoundInstance_Play(FAudioGMS_SoundInstance *insta
if (instance->soundState == SoundState_Paused) if (instance->soundState == SoundState_Paused)
{ {
FAudioSourceVoice_FlushSourceBuffers(instance->voice.handle);
instance->soundData.staticSound->buffer.PlayBegin = instance->soundData.staticSound->buffer.PlayBegin =
instance->voice.handle->src.curBufferOffset; instance->voice.handle->src.curBufferOffset;
instance->soundData.staticSound->buffer.PlayLength = instance->playLength; instance->soundData.staticSound->buffer.PlayLength = instance->playLength;
FAudioSourceVoice_Stop(instance->voice.handle, 0, 0);
FAudioSourceVoice_FlushSourceBuffers(instance->voice.handle);
} }
else else
{ {