diff --git a/crates/tek_core/src/time.rs b/crates/tek_core/src/time.rs index 1df587ad..eebf1071 100644 --- a/crates/tek_core/src/time.rs +++ b/crates/tek_core/src/time.rs @@ -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}") } } diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index 1acd12f7..44382306 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -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)