forked from MoonsideGames/FAudioGMS
fix bug with SetLoop while Playing
parent
3568028dc3
commit
1d3c0dcbc8
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue