From b82b5e46e7c7ab259110fe49712f29220727d762 Mon Sep 17 00:00:00 2001 From: David Marcec Date: Mon, 1 Jul 2019 21:20:23 +1000 Subject: [PATCH 1/2] audren: Only manage wave buffers with a size We shouldn't be incrementing if wave buffers are empty. They are considered invalid/unused wave buffers. This fixes the issue of certain sounds looping when they shouldn't --- src/audio_core/audio_renderer.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index 9a0939883..0c3d7df01 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp @@ -217,13 +217,15 @@ std::vector AudioRenderer::VoiceState::DequeueSamples(std::size_t sample_co if (offset == samples.size()) { offset = 0; - if (!wave_buffer.is_looping) { + if (!wave_buffer.is_looping && wave_buffer.buffer_sz) { SetWaveIndex(wave_index + 1); } - out_status.wave_buffer_consumed++; + if (wave_buffer.buffer_sz) { + out_status.wave_buffer_consumed++; + } - if (wave_buffer.end_of_stream) { + if (wave_buffer.end_of_stream || !wave_buffer.buffer_sz) { info.play_state = PlayState::Paused; } } From e3d000a7e66a7e2c7ecbd7ad9d6626b9bedf66a9 Mon Sep 17 00:00:00 2001 From: David Marcec Date: Mon, 8 Jul 2019 14:49:16 +1000 Subject: [PATCH 2/2] addressed issue --- src/audio_core/audio_renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index 0c3d7df01..4882a6cd8 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp @@ -225,7 +225,7 @@ std::vector AudioRenderer::VoiceState::DequeueSamples(std::size_t sample_co out_status.wave_buffer_consumed++; } - if (wave_buffer.end_of_stream || !wave_buffer.buffer_sz) { + if (wave_buffer.end_of_stream || wave_buffer.buffer_sz == 0) { info.play_state = PlayState::Paused; } }