pub(crate) mod master;
pub(crate) mod passthrough;
pub(crate) mod slave;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TickSchedule {
pub next_tick_ns: u64,
pub interval_ns: u64,
pub subdivision: u8,
pub beat: u64,
}
#[must_use]
pub fn interval_ns_from_bpm(bpm: f64) -> u64 {
(60.0 / (bpm * 24.0) * 1_000_000_000.0) as u64
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_interval_ns_from_bpm_120() {
let interval = interval_ns_from_bpm(120.0);
assert_eq!(interval, 20_833_333);
}
#[test]
fn test_interval_ns_from_bpm_60() {
let interval = interval_ns_from_bpm(60.0);
assert_eq!(interval, 41_666_666);
}
#[test]
fn test_interval_ns_from_bpm_240() {
let interval = interval_ns_from_bpm(240.0);
assert_eq!(interval, 10_416_666);
}
}