mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-10 13:46:42 +01:00
feat: draw bpm and bbt
This commit is contained in:
parent
c06b9d16e2
commit
b1df7bf4e6
3 changed files with 100 additions and 90 deletions
|
|
@ -131,7 +131,7 @@ impl Sequencer {
|
|||
// Read from sequence into output buffer
|
||||
if self.playing == TransportState::Rolling {
|
||||
let frame = transport.pos.frame() as usize;
|
||||
let quant = self.timebase.fpb() as usize * self.steps / self.resolution;
|
||||
let quant = self.timebase.frames_per_beat() as usize * self.steps / self.resolution;
|
||||
let ticks = self.timebase.frames_to_ticks(frame, frame + frames, quant);
|
||||
for (time, tick) in ticks.iter() {
|
||||
if let Some(events) = sequence.get(&(*tick as u32)) {
|
||||
|
|
@ -235,13 +235,13 @@ fn render (s: &Sequencer, buf: &mut Buffer, mut area: Rect) -> Usually<Rect> {
|
|||
let Rect { x, y, width, .. } = area;
|
||||
let (time0, time1) = s.time_axis;
|
||||
let (note0, note1) = s.note_axis;
|
||||
let pos = s.transport.query().unwrap().pos;
|
||||
let frame = pos.frame();
|
||||
let usecs = s.timebase.frame_to_usec(frame as usize);
|
||||
let usec_per_step = s.timebase.usec_per_step(s.resolution as usize);
|
||||
let steps = usecs / usec_per_step;
|
||||
let pos = s.transport.query().unwrap().pos;
|
||||
let frame = pos.frame();
|
||||
let usecs = s.timebase.frame_to_usec(frame as usize);
|
||||
let ustep = s.timebase.usec_per_step(s.resolution as usize);
|
||||
let steps = usecs / ustep;
|
||||
let header = draw_header(s, buf, area, steps)?;
|
||||
let piano = match s.mode {
|
||||
let piano = match s.mode {
|
||||
SequencerView::Tiny =>
|
||||
Rect { x, y, width, height: 0 },
|
||||
SequencerView::Compact =>
|
||||
|
|
@ -273,7 +273,7 @@ pub fn draw_header (s: &Sequencer, buf: &mut Buffer, area: Rect, beat: usize) ->
|
|||
let step = beat % s.steps;
|
||||
let reps = s.steps / s.resolution;
|
||||
let steps = s.steps % s.resolution;
|
||||
draw_timer(buf, x + width - 2, y + 1, rep, step, reps, steps);
|
||||
draw_timer(buf, x + width - 2, y + 1, &format!("{rep}.{step:02} / {reps}.{steps}"));
|
||||
let style = Style::default().gray();
|
||||
draw_play_stop(buf, x + 2, y + 1, &s.playing);
|
||||
let separator = format!("├{}┤", "-".repeat((area.width - 2).into()));
|
||||
|
|
@ -285,11 +285,10 @@ pub fn draw_header (s: &Sequencer, buf: &mut Buffer, area: Rect, beat: usize) ->
|
|||
Ok(Rect { x, y, width: area.width, height: 3 })
|
||||
}
|
||||
pub fn draw_timer (
|
||||
buf: &mut Buffer, x: u16, y: u16, rep: usize, step: usize, reps: usize, steps: usize
|
||||
buf: &mut Buffer, x: u16, y: u16, timer: &str
|
||||
) {
|
||||
let style = Style::default().gray();
|
||||
let timer = format!("{rep}.{step:02} / {reps}.{steps}");
|
||||
timer.blit(buf, x - timer.len() as u16, y, Some(style.bold().not_dim()));
|
||||
let style = Some(Style::default().gray().bold().not_dim());
|
||||
timer.blit(buf, x - timer.len() as u16, y, style);
|
||||
}
|
||||
pub fn draw_play_stop (buf: &mut Buffer, x: u16, y: u16, state: &TransportState) {
|
||||
let style = Style::default().gray();
|
||||
|
|
@ -554,13 +553,13 @@ fn quantize_prev (s: &mut Sequencer) -> Usually<bool> {
|
|||
let mut s = sequencer.state.lock().unwrap();
|
||||
s.rate = Hz(48000);
|
||||
s.tempo = Tempo(240_000);
|
||||
println!("F/S = {:.03}", s.fps());
|
||||
println!("B/S = {:.03}", s.bps());
|
||||
println!("F/B = {:.03}", s.fpb());
|
||||
println!("T/B = {:.03}", s.tpb());
|
||||
println!("F/T = {:.03}", s.fpt());
|
||||
println!("F/L = {:.03}", s.fpl());
|
||||
println!("T/L = {:.03}", s.tpl());
|
||||
println!("F/S = {:.03}", s.frames_per_second());
|
||||
println!("B/S = {:.03}", s.beats_per_secon());
|
||||
println!("F/B = {:.03}", s.frames_per_beat());
|
||||
println!("T/B = {:.03}", s.ticks_per_beat());
|
||||
println!("F/T = {:.03}", s.frames_per_tick());
|
||||
println!("F/L = {:.03}", s.frames_per_loop());
|
||||
println!("T/L = {:.03}", s.ticks_per_loop());
|
||||
let fpt = s.fpt();
|
||||
let frames_per_chunk = 240;
|
||||
let chunk = |chunk: usize| s.frames_to_ticks(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue