Skip to main content

simple_algorithm

Macro simple_algorithm 

Source
macro_rules! simple_algorithm {
    (
        $(#[$struct_meta:meta])*
        $vis:vis struct $name:ident<$($generic:ident: $bound:path),+> {
            params: {
                $(
                    $(#[$param_meta:meta])*
                    $param_name:ident : $param_type:ty = $param_default:expr
                ),* $(,)?
            },
            state: {
                $(
                    $(#[$state_meta:meta])*
                    $state_name:ident : $state_type:ty = $state_default:expr
                ),* $(,)?
            },
            process: $process:expr
        }
    ) => { ... };
}
Expand description

Macro for creating a simple algorithm without parameters

ยงExample

use rill_core_dsp::simple_algorithm;
use rill_core::math::Transcendental;

simple_algorithm! {
    /// Simple gain
    #[derive(Debug, Clone, Copy)]
    pub struct Gain<T: Transcendental> {
        params: {
    /// Gain coefficient
            gain: T = T::from_f32(1.0),
        },
        state: {
    /// Last output value (for statistics)
            last_output: T = T::ZERO,
        },
        process: |this, input| {
            let output = input * this.gain;
            this.last_output = output;
            output
        }
    }
}