pub const DEFAULT_MAX_LAG: usize = 8;
pub const MIN_TEMPLATE_ENERGY: f32 = 1e-12;
#[derive(Debug, Clone)]
pub struct TemplateFilter {
pub template: Vec<f32>,
pub template_channels: usize,
pub template_samples: usize,
pub center_offset: usize,
pub max_lag: usize,
pub dynamic_scaling: bool,
}
impl TemplateFilter {
pub fn new_1d(template: Vec<f32>, center_offset: usize) -> Self {
let len = template.len();
Self {
template,
template_channels: 1,
template_samples: len,
center_offset,
max_lag: DEFAULT_MAX_LAG,
dynamic_scaling: true,
}
}
pub fn new_multichannel(
template: Vec<f32>,
channels: usize,
samples: usize,
center_offset: usize,
) -> Self {
assert_eq!(template.len(), channels * samples);
Self {
template,
template_channels: channels,
template_samples: samples,
center_offset,
max_lag: DEFAULT_MAX_LAG,
dynamic_scaling: true,
}
}
pub fn with_max_lag(mut self, max_lag: usize) -> Self {
self.max_lag = max_lag;
self
}
pub fn with_dynamic_scaling(mut self, enabled: bool) -> Self {
self.dynamic_scaling = enabled;
self
}
}