use cute_dsp::envelopes::{CubicLfo, BoxFilter, BoxStackFilter, PeakHold, PeakDecayLinear};
fn main() {
println!("Envelopes Example");
println!("================");
cubic_lfo_example();
box_filter_example();
box_stack_filter_example();
peak_hold_example();
peak_decay_linear_example();
}
fn cubic_lfo_example() {
println!("\nCubic LFO Example:");
let mut lfo = CubicLfo::new();
lfo.set(0.0, 1.0, 0.1, 0.2, 0.1);
println!("Generating 10 LFO values:");
for i in 0..10 {
let value = lfo.next();
println!("Value {}: {}", i, value);
}
lfo.reset();
println!("After reset, next value: {}", lfo.next());
let mut seeded_lfo = CubicLfo::with_seed(12345);
seeded_lfo.set(0.0, 1.0, 0.1, 0.2, 0.1);
println!("Seeded LFO first value: {}", seeded_lfo.next());
}
fn box_filter_example() {
println!("\nBox Filter Example:");
let mut filter = BoxFilter::<f32>::new(10);
filter.set(5);
filter.reset(0.0);
println!("Processing impulse response:");
let mut value = 1.0;
for i in 0..15 {
value = filter.process(if i == 0 { 1.0 } else { 0.0 });
println!("Output {}: {}", i, value);
}
filter.reset(0.0);
println!("\nProcessing step response:");
for i in 0..15 {
value = filter.process(1.0);
println!("Output {}: {}", i, value);
}
}
fn box_stack_filter_example() {
println!("\nBox Stack Filter Example:");
let mut filter = BoxStackFilter::<f32>::new(100, 3);
filter.set(50);
filter.reset();
println!("Processing impulse response:");
let mut value = 1.0;
for i in 0..20 {
value = filter.process(if i == 0 { 1.0 } else { 0.0 });
println!("Output {}: {}", i, value);
}
filter.reset();
println!("\nProcessing step response:");
for i in 0..20 {
value = filter.process(1.0);
println!("Output {}: {}", i, value);
}
println!("\nFilter properties:");
println!("Bandwidth for 3 layers: {}", BoxStackFilter::<f32>::layers_to_bandwidth(3));
println!("Peak attenuation for 3 layers: {} dB", BoxStackFilter::<f32>::layers_to_peak_db(3));
}
fn peak_hold_example() {
println!("\nPeak Hold Example:");
let mut peak_hold = PeakHold::<f32>::new(10);
peak_hold.set(5, false);
println!("Processing data:");
let data = [0.1, 0.5, 0.3, 0.8, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0];
for (i, &value) in data.iter().enumerate() {
let output = peak_hold.process(value);
println!("Input: {}, Output: {}", value, output);
}
peak_hold.reset();
println!("\nAfter reset:");
println!("Current peak: {}", peak_hold.read());
}
fn peak_decay_linear_example() {
println!("\nPeak Decay Linear Example:");
let mut peak_decay = PeakDecayLinear::<f32>::new(100);
peak_decay.set(10.0);
peak_decay.reset();
println!("Processing data:");
let data = [0.1, 0.5, 0.3, 0.8, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
for (i, &value) in data.iter().enumerate() {
let output = peak_decay.process(value);
println!("Input: {}, Output: {}", value, output);
}
}