diff options
author | Hein-Pieter van Braam <hp@tmm.cx> | 2017-12-17 22:31:35 +0100 |
---|---|---|
committer | Hein-Pieter van Braam <hp@tmm.cx> | 2017-12-18 00:53:51 +0100 |
commit | 139daf0e035645054129b9e31a188721fea0973a (patch) | |
tree | 9f06a1fb995938d83910a07cd9fa0d9c97ec4c58 | |
parent | 89a32b49778b5411b2bc562260c49925eb219334 (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.cpp | 7 |
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); } |