ljud 0.0.5

Graph-based music DSP library with a focus on flexibility.
Documentation
use crate::node::Node;
use crate::param::*;
use crate::{Buffer, Context};

#[cfg(feature = "no_std")]
use crate::Box;

pub struct Add {
    val: ParamType,
}

impl Add {
    pub fn new(val: impl Param + Send) -> Self {
        Self {
            val: val.as_param(),
        }
    }

    fn process_chain(&mut self, buffer: &mut Buffer, val: f32) {
        for channel in buffer.iter_mut() {
            for sample in channel.iter_mut() {
                *sample += val;
            }
        }
    }

    fn process_sidechain(&mut self, buffer: &mut Buffer, sidechain: &mut Buffer) {
        for (channel, sidechain_channel) in buffer.iter_mut().zip(sidechain.iter()) {
            for (sample, sidechain_sample) in channel.iter_mut().zip(sidechain_channel.iter()) {
                *sample += *sidechain_sample;
            }
        }
    }
}

impl Node for Add {
    fn process(&mut self, buffer: &mut Buffer, context: &mut Context) {
        match self.val {
            ParamType::Float(val) => {
                self.process_chain(buffer, val);
            }
            ParamType::Str(s) => {
                let sidechain_buffer = context.buffers.get_mut(s).unwrap();
                self.process_sidechain(buffer, sidechain_buffer);
            }
        }
    }
}

pub fn add(val: impl Param) -> Box<dyn Node + Send> {
    Box::new(Add::new(val))
}