beat_timing/
beat_timing.rs1use bpm_analyzer::{AnalyzerConfig, begin};
7
8fn main() -> Result<(), bpm_analyzer::Error> {
9 let config = AnalyzerConfig::electronic();
11
12 println!("Starting BPM analyzer...");
13 println!("Listening for beats and tempo...\n");
14
15 let receiver = begin(config)?;
17
18 for detection in receiver.iter() {
20 if let Some(bpm) = detection.bpm() {
22 println!("🎵 Detected BPM: {:.1}", bpm);
23 }
24
25 if let Some(last_beat) = detection.last_beat() {
27 print!(
28 "🥁 Beat at {:.2}s (strength: {:.2})",
29 last_beat.time_seconds, last_beat.strength
30 );
31
32 if let Some(interval) = detection.last_beat_interval() {
34 let instant_bpm = 60.0 / interval;
35 print!(" | Interval: {:.3}s ({:.1} BPM)", interval, instant_bpm);
36 }
37 println!();
38 }
39
40 let beats = detection.beat_timings();
42 if beats.len() >= 4 {
43 println!("📊 Recent beats: {} detected", beats.len());
44 for (i, beat) in beats.iter().rev().take(4).enumerate() {
45 println!(
46 " {} {:.2}s ago (strength: {:.2})",
47 if i == 0 { "•" } else { " " },
48 beats.last().unwrap().time_seconds - beat.time_seconds,
49 beat.strength
50 );
51 }
52 }
53
54 println!();
55 }
56
57 Ok(())
58}