use bpm_analyzer::{AnalyzerConfig, begin};
fn main() -> Result<(), bpm_analyzer::Error> {
let config = AnalyzerConfig::electronic();
println!("Starting BPM analyzer...");
println!("Listening for beats and tempo...\n");
let receiver = begin(config)?;
for detection in receiver.iter() {
if let Some(bpm) = detection.bpm() {
println!("🎵 Detected BPM: {:.1}", bpm);
}
if let Some(last_beat) = detection.last_beat() {
print!(
"🥁 Beat at {:.2}s (strength: {:.2})",
last_beat.time_seconds, last_beat.strength
);
if let Some(interval) = detection.last_beat_interval() {
let instant_bpm = 60.0 / interval;
print!(" | Interval: {:.3}s ({:.1} BPM)", interval, instant_bpm);
}
println!();
}
let beats = detection.beat_timings();
if beats.len() >= 4 {
println!("📊 Recent beats: {} detected", beats.len());
for (i, beat) in beats.iter().rev().take(4).enumerate() {
println!(
" {} {:.2}s ago (strength: {:.2})",
if i == 0 { "•" } else { " " },
beats.last().unwrap().time_seconds - beat.time_seconds,
beat.strength
);
}
}
println!();
}
Ok(())
}