euphony_core/time/
unquantized_beat.rs

1use crate::{ratio::Ratio, time::beat::Beat};
2
3#[derive(Clone, Copy, Debug, Default, PartialEq, PartialOrd, Ord, Eq)]
4pub struct UnquantizedBeat(pub u64, pub Beat);
5
6impl UnquantizedBeat {
7    pub fn quantize(self, min: Beat) -> Beat {
8        let count = self.1.as_ratio() / min.as_ratio();
9        let count = count.whole() + if count.fraction() > Ratio(1, 2) { 1 } else { 0 };
10        Beat(self.0, 1) + min * count
11    }
12}