summaryrefslogtreecommitdiffstats
path: root/servers/audio/audio_stream.cpp
diff options
context:
space:
mode:
authorHein-Pieter van Braam <hp@tmm.cx>2017-12-17 22:31:35 +0100
committerHein-Pieter van Braam <hp@tmm.cx>2017-12-18 00:53:51 +0100
commit139daf0e035645054129b9e31a188721fea0973a (patch)
tree9f06a1fb995938d83910a07cd9fa0d9c97ec4c58 /servers/audio/audio_stream.cpp
parent89a32b49778b5411b2bc562260c49925eb219334 (diff)
downloadredot-engine-139daf0e035645054129b9e31a188721fea0973a.tar.gz
Don't try to mix a sample that has already ended
On short samples the sample may finish playing before the mixer is done. This fills the remaining time with zeros and ends mixing. This fixes the users getting the following error logged: ::_mix_internal: Condition ' !active ' is true.
Diffstat (limited to 'servers/audio/audio_stream.cpp')
-rw-r--r--servers/audio/audio_stream.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index d7b2c2c5e0..15d4a11223 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -76,6 +76,13 @@ void AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
internal_buffer[1] = internal_buffer[INTERNAL_BUFFER_LEN + 1];
internal_buffer[2] = internal_buffer[INTERNAL_BUFFER_LEN + 2];
internal_buffer[3] = internal_buffer[INTERNAL_BUFFER_LEN + 3];
+ if (!is_playing()) {
+ for (int i = 4; i < INTERNAL_BUFFER_LEN; ++i) {
+ internal_buffer[i] = AudioFrame(0, 0);
+ }
+
+ return;
+ }
_mix_internal(internal_buffer + 4, INTERNAL_BUFFER_LEN);
mix_offset -= (INTERNAL_BUFFER_LEN << FP_BITS);
}