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

View file

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