From 4eac548202ffb2ce4e0c0b9d6792620a23b8ab5c Mon Sep 17 00:00:00 2001 From: Fabian Keller Date: Sun, 10 Sep 2023 09:22:21 +0200 Subject: [PATCH] bugfix for audio stream generators getting killed accidentally by audio server --- servers/audio/effects/audio_stream_generator.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/servers/audio/effects/audio_stream_generator.cpp b/servers/audio/effects/audio_stream_generator.cpp index 5cfe51465d29..f4727e72ecdb 100644 --- a/servers/audio/effects/audio_stream_generator.cpp +++ b/servers/audio/effects/audio_stream_generator.cpp @@ -143,6 +143,10 @@ void AudioStreamGeneratorPlayback::clear_buffer() { } int AudioStreamGeneratorPlayback::_mix_internal(AudioFrame *p_buffer, int p_frames) { + if (!active) { + return 0; + } + int read_amount = buffer.data_left(); if (p_frames < read_amount) { read_amount = p_frames; @@ -151,16 +155,15 @@ int AudioStreamGeneratorPlayback::_mix_internal(AudioFrame *p_buffer, int p_fram buffer.read(p_buffer, read_amount); if (read_amount < p_frames) { - //skipped, not ideal + // Fill with zeros as fallback in case of buffer underrun. for (int i = read_amount; i < p_frames; i++) { p_buffer[i] = AudioFrame(0, 0); } - skips++; } mixed += p_frames / generator->get_mix_rate(); - return read_amount < p_frames ? read_amount : p_frames; + return p_frames; } float AudioStreamGeneratorPlayback::get_stream_sampling_rate() { @@ -181,7 +184,7 @@ void AudioStreamGeneratorPlayback::stop() { } bool AudioStreamGeneratorPlayback::is_playing() const { - return active; //always playing, can't be stopped + return active; } int AudioStreamGeneratorPlayback::get_loop_count() const {