use crate::{Buffer, Input, Node};
#[derive(Clone, Debug, PartialEq)]
pub struct Sum;
#[derive(Clone, Debug, PartialEq)]
pub struct SumBuffers;
impl Node for Sum {
fn process(&mut self, inputs: &[Input], output: &mut [Buffer]) {
for out_buffer in output.iter_mut() {
out_buffer.silence();
}
for (channel, out_buffer) in output.iter_mut().enumerate() {
for input in inputs {
let in_buffers = input.buffers();
if let Some(in_buffer) = in_buffers.get(channel) {
dasp_slice::add_in_place(out_buffer, in_buffer);
}
}
}
}
}
impl Node for SumBuffers {
fn process(&mut self, inputs: &[Input], output: &mut [Buffer]) {
let mut out_buffers = output.iter_mut();
let out_buffer_first = match out_buffers.next() {
None => return,
Some(buffer) => buffer,
};
out_buffer_first.silence();
for input in inputs {
for in_buffer in input.buffers() {
dasp_slice::add_in_place(out_buffer_first, in_buffer);
}
}
for out_buffer in out_buffers {
out_buffer.copy_from_slice(out_buffer_first);
}
}
}