summaryrefslogtreecommitdiff
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
parent89a32b49778b5411b2bc562260c49925eb219334 (diff)
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.
-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);
}