From 91832e00723d3e5bce3ec42e4c0eb37714ac95b8 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 1 Jul 2024 21:37:09 +0300 Subject: [PATCH] seconds timer --- src/device/launcher/mod.rs | 42 +++++++++++++++++++------------------- src/device/transport.rs | 12 +++++++---- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/device/launcher/mod.rs b/src/device/launcher/mod.rs index 485dd8c4..549f6024 100644 --- a/src/device/launcher/mod.rs +++ b/src/device/launcher/mod.rs @@ -5,19 +5,19 @@ mod grid; pub use self::grid::*; mod handle; pub use self::handle::*; pub struct Launcher { - name: String, - timebase: Arc, - transport: ::jack::Transport, - playing: TransportState, - monitoring: bool, - recording: bool, - overdub: bool, - position: usize, - cursor: (usize, usize), - pub tracks: Vec, - scenes: Vec, - show_help: bool, - view: LauncherView, + name: String, + timebase: Arc, + transport: ::jack::Transport, + playing: TransportState, + monitoring: bool, + recording: bool, + overdub: bool, + current_frame: usize, + cursor: (usize, usize), + pub tracks: Vec, + scenes: Vec, + show_help: bool, + view: LauncherView, } pub enum LauncherView { Tracks, Sequencer, Chains, Modal(Box) } impl LauncherView { @@ -57,7 +57,7 @@ impl Launcher { recording: false, overdub: true, cursor: (2, 2), - position: 0, + current_frame: 0, scenes: scenes.unwrap_or_else(||vec![Scene::new(&"Scene 1", &[None])]), tracks: if let Some(tracks) = tracks { tracks } else { vec![ Track::new("Track 1", &timebase, None, Some(vec![ @@ -172,9 +172,9 @@ impl DynamicDevice { } impl PortList for Launcher {} pub fn process (state: &mut Launcher, _: &Client, _: &ProcessScope) -> Control { - let transport = state.transport.query().unwrap(); - state.playing = transport.state; - state.position = transport.pos.frame() as usize; + let transport = state.transport.query().unwrap(); + state.playing = transport.state; + state.current_frame = transport.pos.frame() as usize; Control::Continue } pub fn render (state: &Launcher, buf: &mut Buffer, mut area: Rect) -> Usually { @@ -188,14 +188,14 @@ pub fn render (state: &Launcher, buf: &mut Buffer, mut area: Rect) -> Usually, frame: usize) { - let tick = (frame as f64 / timebase.frames_per_tick()); - let (beats, ticks) = (tick / timebase.ppq(), tick % timebase.ppq()); - let (bars, beats) = (beats / 4.0, beats % 4.0); - let timer = format!("{}.{}.{ticks:02}", bars as usize + 1, beats as usize + 1); + let ppq = timebase.ppq() as usize; + let pulse = timebase.frames_pulses(frame as f64) as usize; + let (beats, pulses) = (pulse / ppq, pulse % ppq); + let (bars, beats) = (beats / 4, beats % 4); + let usecs = timebase.frames_usecs(frame as f64) as usize; + let (seconds, msecs) = (usecs / 1000000, usecs / 1000 % 1000); + let (minutes, seconds) = (seconds / 60, seconds % 60); + let timer = format!("{minutes}:{seconds:02}:{msecs:03} {}.{}.{pulses:02}", bars as usize + 1, beats as usize + 1); timer.blit(buf, x - timer.len() as u16, y, Some(Style::default().not_dim())); } pub fn draw_play_stop (buf: &mut Buffer, x: u16, y: u16, state: &TransportState) {