begin

Function begin 

Source
pub fn begin(config: AnalyzerConfig) -> Result<Receiver<BpmDetection>>
Expand description

Starts the BPM analyzer with the given configuration using the default device.

This automatically selects an audio input device, preferring BlackHole on macOS, then falling back to the system default input device.

§Arguments

  • config - The analyzer configuration

§Returns

A Receiver that yields BpmDetection results containing up to 5 BPM candidates sorted by confidence (highest first).

§Errors

Returns an error if:

  • The configuration is invalid
  • No suitable audio input device is found
  • The audio stream cannot be configured or started
  • The device’s sample format is unsupported

§Example

use bpm_analyzer::{AnalyzerConfig, begin};

let config = AnalyzerConfig::electronic();
let receiver = begin(config)?;

for detection in receiver.iter() {
    if let Some(bpm) = detection.bpm() {
        println!("Detected BPM: {:.1}", bpm);
    }
}
Examples found in repository?
examples/beat_timing.rs (line 16)
8fn main() -> Result<(), bpm_analyzer::Error> {
9    // Configure the analyzer for electronic music
10    let config = AnalyzerConfig::electronic();
11
12    println!("Starting BPM analyzer...");
13    println!("Listening for beats and tempo...\n");
14
15    // Start the analyzer
16    let receiver = begin(config)?;
17
18    // Process detections
19    for detection in receiver.iter() {
20        // Print BPM if detected
21        if let Some(bpm) = detection.bpm() {
22            println!("🎵 Detected BPM: {:.1}", bpm);
23        }
24
25        // Print beat timings
26        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            // Show beat interval if we have at least 2 beats
33            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        // Print all recent beat timings
41        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}