libdaw 0.2.0

A library for Rust for making programmable DAWs
Documentation
use crate::{stream::Stream, sync::AtomicF64, Node, Result};
use std::sync::atomic::Ordering;

#[derive(Debug)]
pub struct Gain {
    gain: AtomicF64,
}

impl Gain {
    pub fn new(gain: f64) -> Self {
        Self {
            gain: AtomicF64::new(gain),
        }
    }

    pub fn set_gain(&self, gain: f64) {
        self.gain.store(gain, Ordering::Relaxed);
    }

    pub fn get_gain(&self) -> f64 {
        self.gain.load(Ordering::Relaxed)
    }
}

impl Node for Gain {
    fn process<'a, 'b, 'c>(
        &'a self,
        inputs: &'b [Stream],
        outputs: &'c mut Vec<Stream>,
    ) -> Result<()> {
        outputs.extend_from_slice(inputs);
        let gain = self.gain.load(Ordering::Relaxed);

        for output in outputs {
            *output *= gain;
        }
        Ok(())
    }
}