use cute_dsp::delay::{
Delay,
MultiDelay,
InterpolatorNearest,
InterpolatorLinear,
InterpolatorCubic,
};
fn main() {
println!("Delay Example");
println!("=============");
basic_delay_example();
interpolation_comparison();
multi_delay_example();
}
fn basic_delay_example() {
println!("\nBasic Delay Example:");
let mut delay = Delay::new(InterpolatorCubic::<f32>::new(), 100);
delay.reset(0.0);
let mut output_samples = Vec::new();
for i in 0..20 {
let input = if i == 0 { 1.0 } else { 0.0 };
let output = delay.read(5.5);
output_samples.push(output);
delay.write(input);
}
println!("Delay line output with 5.5 sample delay:");
for (i, sample) in output_samples.iter().enumerate() {
println!("Sample {}: {}", i, sample);
}
}
fn interpolation_comparison() {
println!("\nInterpolation Comparison:");
let mut delay_nearest = Delay::new(InterpolatorNearest::<f32>::new(), 100);
let mut delay_linear = Delay::new(InterpolatorLinear::<f32>::new(), 100);
let mut delay_cubic = Delay::new(InterpolatorCubic::<f32>::new(), 100);
delay_nearest.reset(0.0);
delay_linear.reset(0.0);
delay_cubic.reset(0.0);
let mut output_nearest = Vec::new();
let mut output_linear = Vec::new();
let mut output_cubic = Vec::new();
for i in 0..20 {
let input = if i == 0 { 1.0 } else { 0.0 };
output_nearest.push(delay_nearest.read(5.7));
output_linear.push(delay_linear.read(5.7));
output_cubic.push(delay_cubic.read(5.7));
delay_nearest.write(input);
delay_linear.write(input);
delay_cubic.write(input);
}
println!("Comparison of interpolation methods with 5.7 sample delay:");
println!("Sample | Nearest | Linear | Cubic");
println!("-------|----------|----------|--------");
for i in 0..20 {
println!("{:6} | {:8.5} | {:8.5} | {:8.5}",
i, output_nearest[i], output_linear[i], output_cubic[i]);
}
}
fn multi_delay_example() {
println!("\nMulti-channel Delay Example:");
let mut multi_delay = MultiDelay::new(InterpolatorCubic::<f32>::new(), 2, 100);
multi_delay.reset(0.0);
let mut output_ch0 = Vec::new();
let mut output_ch1 = Vec::new();
for i in 0..20 {
let input = [
if i == 0 { 1.0 } else { 0.0 },
if i == 5 { 1.0 } else { 0.0 }
];
let mut output = [0.0, 0.0];
multi_delay.read_multi(&[3.5, 7.2], &mut output);
output_ch0.push(output[0]);
output_ch1.push(output[1]);
multi_delay.write(&input);
}
println!("Multi-channel delay output:");
println!("Sample | Channel 0 | Channel 1");
println!("-------|-----------|----------");
for i in 0..20 {
println!("{:6} | {:9.5} | {:9.5}", i, output_ch0[i], output_ch1[i]);
}
}