mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
format beats from 0 or 1
This commit is contained in:
parent
b8047ab1ef
commit
10c5dcca9d
2 changed files with 20 additions and 7 deletions
|
|
@ -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}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue