summaryrefslogtreecommitdiffstats
path: root/servers/audio/effects/audio_stream_generator.cpp
diff options
context:
space:
mode:
authorFabian Keller <github.100.fkeller@spamgourmet.com>2023-09-10 09:22:21 +0200
committerFabian Keller <github.100.fkeller@spamgourmet.com>2023-09-10 09:22:21 +0200
commit4eac548202ffb2ce4e0c0b9d6792620a23b8ab5c (patch)
tree946edc5f997f6449755152d58685af0c4fe34141 /servers/audio/effects/audio_stream_generator.cpp
parentfc99492d3066098e938449b10e02f8e01d07e2d1 (diff)
downloadredot-engine-4eac548202ffb2ce4e0c0b9d6792620a23b8ab5c.tar.gz
bugfix for audio stream generators getting killed accidentally by audio server
Diffstat (limited to 'servers/audio/effects/audio_stream_generator.cpp')
-rw-r--r--servers/audio/effects/audio_stream_generator.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/servers/audio/effects/audio_stream_generator.cpp b/servers/audio/effects/audio_stream_generator.cpp
index 5cfe51465d..f4727e72ec 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 {