diff options
Diffstat (limited to 'src/mixer')
| -rw-r--r-- | src/mixer/mixer.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c index 987bc8b..e6fd178 100644 --- a/src/mixer/mixer.c +++ b/src/mixer/mixer.c @@ -30,12 +30,20 @@ static s32 data_callback(void *userdata, u8 *data, s32 frame_count, bool *silenc } else { *silence = true; } + struct camu_audio_buffer *buf; + // Read from all current buffers on each callback to + // emulate the behavior of an actual mixer. + al_array_foreach(mixer->buffers, i, buf) { + if (i < mixer->buffers.size - 1) { + camu_audio_buffer_read(buf, data, req); + } + } do { if (al_array_is_empty(mixer->buffers)) { al_memset(data, 0, req); } else { size_t signal; - struct camu_audio_buffer *buf = al_array_last(mixer->buffers); + buf = al_array_last(mixer->buffers); *silence = false; if ((signal = camu_audio_buffer_read(buf, data, req)) < req) { #ifdef CAMU_MIXER_THREADED |