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}")
}
}

View file

@ -198,8 +198,12 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
.map(|(t, _)|{
let target = t.pulse().get();
let current = clock.instant.pulse().get();
let remaining = clock.timebase().format_beats(target - current);
format!("{remaining:>}")
if target > current {
let remaining = clock.timebase().format_beats_0(target - current);
format!("▎-{remaining:>}")
} else {
String::new()
}
})
.unwrap_or(String::from(""));
let output_name = track.player.midi_outputs.get(0)