#[allow(unused)] use crate::*; #[derive(Debug, Default)] pub enum MixingMode { #[default] Summing, Average, } pub fn mix_summing ( buffer: &mut [Vec], gain: f32, frames: usize, mut next: impl FnMut()->Option<[f32;N]>, ) -> bool { let channels = buffer.len(); for index in 0..frames { if let Some(frame) = next() { for (channel, sample) in frame.iter().enumerate() { let channel = channel % channels; buffer[channel][index] += sample * gain; } } else { return false } } true } pub fn mix_average ( buffer: &mut [Vec], gain: f32, frames: usize, mut next: impl FnMut()->Option<[f32;N]>, ) -> bool { let channels = buffer.len(); for index in 0..frames { if let Some(frame) = next() { for (channel, sample) in frame.iter().enumerate() { let channel = channel % channels; let value = buffer[channel][index]; buffer[channel][index] = (value + sample * gain) / 2.0; } } else { return false } } true }