macro_rules! parameterized_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
),* $(,)?
},
update: $update:expr,
process: $process:expr
}
) => { ... };
}Expand description
Макрос для создания алгоритма с параметрами
§Пример
use rill_core_dsp::parameterized_algorithm;
use rill_core::math::Transcendental;
parameterized_algorithm! {
/// Фильтр с изменяемой частотой среза
#[derive(Debug, Clone, Copy)]
pub struct LowPass<T: Transcendental> {
params: {
/// Частота среза в Hz
cutoff: T = T::from_f32(1000.0),
/// Добротность
q: T = T::from_f32(0.707),
},
state: {
/// Внутреннее состояние фильтра
y1: T = T::ZERO,
y2: T = T::ZERO,
},
update: |this| {
// Обновление коэффициентов при изменении параметров
},
process: |this, input| {
// Процессинг с текущими параметрами
input
}
}
}