display/play/stop transport

This commit is contained in:
🪞👃🪞 2024-05-30 21:27:02 +03:00
parent 265dc13248
commit 1f928fba9d
8 changed files with 251 additions and 177 deletions

View file

@ -1,6 +1,6 @@
use crate::prelude::*;
use super::*;
pub fn handle (state: &mut Transport, event: &Event) -> Result<(), Box<dyn Error>> {
pub fn handle (state: &mut super::Transport, event: &Event) -> Result<(), Box<dyn Error>> {
Ok(())
}

View file

@ -7,31 +7,58 @@ pub fn render (
mut offset: (u16, u16)
) -> Result<(), Box<dyn Error>> {
let move_to = |col, row| MoveTo(offset.0 + col, offset.1 + row);
let position = state.transport.query();
stdout.queue(move_to( 1, 0))?.queue(
Print("Project: ")
)?.queue(move_to(10, 0))?.queue(
PrintStyledContent("The Quick Brown Fox - Jumping Over Lazy Dogs".white().bold())
)?.queue(move_to( 1, 1))?.queue(
Print("Rate: ")
)?.queue(move_to( 7, 1))?.queue(
PrintStyledContent("48000Hz".white().bold())
)?.queue(move_to(20, 1))?.queue(
Print("BPM: ")
)?.queue(move_to(25, 1))?.queue(
PrintStyledContent("120.34".white().bold())
)?.queue(move_to(35, 1))?.queue(
Print("Signature: ")
)?.queue(move_to(46, 1))?.queue(
PrintStyledContent("4 / 4".white().bold())
)?.queue(move_to( 1, 2))?.queue(
Print("Time: ")
)?.queue(move_to( 7, 2))?.queue(
PrintStyledContent("1m 23.456s".white().bold())
)?.queue(move_to(20, 2))?.queue(
Print("Beat: ")
)?.queue(move_to(26, 2))?.queue(
PrintStyledContent("30x 3/4".white().bold())
PrintStyledContent(state.title.clone().white().bold())
)?;
if let Ok(position) = state.transport.query() {
let frame = position.pos.frame();
let rate = position.pos.frame_rate();
let bbt = position.pos.bbt();
stdout
.queue(move_to( 1, 1))?.queue(Print("Frame: "))?
.queue(move_to( 1, 2))?.queue(
PrintStyledContent(
format!("{frame}").white().bold(),
))?
.queue(move_to(11, 1))?.queue(Print("Rate: "))?
.queue(move_to(11, 2))?.queue(
PrintStyledContent(match rate {
Some(rate) => format!("{rate}Hz"),
None => String::from("(none)"),
}.white().bold())
)?
.queue(move_to(20, 1))?.queue(Print("Time: "))?
.queue(move_to(20, 2))?.queue(
PrintStyledContent(match rate {
Some(rate) => format!("{:.03}", frame as f64 / rate as f64),
None => String::from("(none)")
}.white().bold())
)?
.queue(move_to(30, 1))?.queue(Print("BPM: "))?
.queue(move_to(30, 2))?.queue(
PrintStyledContent(match bbt {
Some(bbt) => format!("{:.01}", bbt.bpm),
None => String::from("(none)")
}.white().bold())
)?
.queue(move_to(39, 1))?.queue(Print("Timesig: "))?
.queue(move_to(39, 2))?.queue(
PrintStyledContent(match bbt {
Some(bbt) => format!("{}/{}", bbt.sig_num, bbt.sig_denom),
None => String::from("(none)")
}.white().bold())
)?
.queue(move_to(50, 1))?.queue(Print("Beat: "))?
.queue(move_to(50, 2))?.queue(
PrintStyledContent(match bbt {
Some(bbt) => format!("{}.{}.{}", bbt.bar, bbt.beat, bbt.tick),
None => String::from("(none)")
}.white().bold())
)?;
}
Ok(())
}