format beats from 0 or 1

This commit is contained in:
🪞👃🪞 2024-11-01 16:49:09 +02:00
parent b8047ab1ef
commit 10c5dcca9d
2 changed files with 20 additions and 7 deletions

View file

@ -122,7 +122,7 @@ impl Instant {
self.sample.set(self.timebase.pulses_to_sample(pulse));
}
pub fn format_beat (&self) -> String {
self.format_beats(self.pulse().get())
self.format_beats_1(self.pulse().get())
}
}
/// Iterator that emits subsequent ticks within a range.
@ -223,13 +223,22 @@ pub trait MIDITime {
) -> Vec<(f64, f64)> {
events.map(|(time, event)|(self.quantize(step, time).0, event)).collect()
}
/// Format a number of pulses into Beat.Bar.Pulse
#[inline] fn format_beats (&self, pulse: f64) -> String {
/// Format a number of pulses into Beat.Bar.Pulse starting from 0
#[inline] fn format_beats_0 (&self, pulse: f64) -> String {
let pulse = pulse as usize;
let ppq = self.ppq().get() as usize;
let (beats, pulses) = if ppq > 0 { (pulse / ppq, pulse % ppq) } else { (0, 0) };
let bars = ((beats / 4) + 1) as usize;
let beats = ((beats % 4) + 1) as usize;
let bars = beats / 4;
let beats = beats % 4;
format!("{bars}.{beats}.{pulses:02}")
}
/// Format a number of pulses into Beat.Bar.Pulse starting from 1
#[inline] fn format_beats_1 (&self, pulse: f64) -> String {
let pulse = pulse as usize;
let ppq = self.ppq().get() as usize;
let (beats, pulses) = if ppq > 0 { (pulse / ppq, pulse % ppq) } else { (0, 0) };
let bars = beats / 4 + 1;
let beats = beats % 4 + 1;
format!("{bars}.{beats}.{pulses:02}")
}
}