summaryrefslogtreecommitdiff
path: root/src/mixer
diff options
context:
space:
mode:
Diffstat (limited to 'src/mixer')
-rw-r--r--src/mixer/mixer.c10
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