pub struct BpmDetection { /* private fields */ }Expand description
Result from BPM detection containing up to 5 candidates sorted by confidence.
Implementations§
Source§impl BpmDetection
impl BpmDetection
Sourcepub fn from_array(arr: [(f32, f32); 5]) -> Self
pub fn from_array(arr: [(f32, f32); 5]) -> Self
Creates a new detection result from an array of candidates.
Sourcepub fn with_beats(arr: [(f32, f32); 5], beat_timings: Vec<BeatTiming>) -> Self
pub fn with_beats(arr: [(f32, f32); 5], beat_timings: Vec<BeatTiming>) -> Self
Creates a new detection result with beat timings.
Sourcepub fn top_candidate(&self) -> Option<&BpmCandidate>
pub fn top_candidate(&self) -> Option<&BpmCandidate>
Returns the top BPM candidate (highest confidence).
Sourcepub fn candidates(&self) -> &[BpmCandidate]
pub fn candidates(&self) -> &[BpmCandidate]
Returns all candidates.
Sourcepub fn bpm(&self) -> Option<f32>
pub fn bpm(&self) -> Option<f32>
Returns the most likely BPM value.
Examples found in repository?
examples/beat_timing.rs (line 21)
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}Sourcepub fn in_range(&self, min: f32, max: f32) -> Vec<BpmCandidate>
pub fn in_range(&self, min: f32, max: f32) -> Vec<BpmCandidate>
Returns candidates within a specific BPM range.
Sourcepub fn beat_timings(&self) -> &[BeatTiming]
pub fn beat_timings(&self) -> &[BeatTiming]
Returns the detected beat timings.
Examples found in repository?
examples/beat_timing.rs (line 41)
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}Sourcepub fn last_beat(&self) -> Option<&BeatTiming>
pub fn last_beat(&self) -> Option<&BeatTiming>
Returns the most recent beat timing, if available.
Examples found in repository?
examples/beat_timing.rs (line 26)
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}Sourcepub fn last_beat_interval(&self) -> Option<f64>
pub fn last_beat_interval(&self) -> Option<f64>
Returns the time interval between the last two beats, if available.
Examples found in repository?
examples/beat_timing.rs (line 33)
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}Trait Implementations§
Source§impl Clone for BpmDetection
impl Clone for BpmDetection
Source§fn clone(&self) -> BpmDetection
fn clone(&self) -> BpmDetection
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for BpmDetection
impl RefUnwindSafe for BpmDetection
impl Send for BpmDetection
impl Sync for BpmDetection
impl Unpin for BpmDetection
impl UnwindSafe for BpmDetection
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more