From c20d49cd45657311e52427af17c6fa981ea3e600 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 1 Nov 2024 22:28:56 +0200 Subject: [PATCH] launch pt.7: allow enqueuing None phrase --- crates/tek_sequencer/src/arranger_tui.rs | 7 +++++-- crates/tek_sequencer/src/sequencer_snd.rs | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index b0a0a0fc..bd507155 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -187,9 +187,12 @@ impl<'a> Content for VerticalArranger<'a, Tui> { // track controls let footer = row!((track, w) in tracks.iter().zip(cols.iter().map(|col|col.0))=>{ let player = &track.player; - let elapsed = if let Some((_, Some(_))) = player.phrase.as_ref() { + let elapsed = if let Some((_, Some(phrase))) = player.phrase.as_ref() { + let length = phrase.read().unwrap().length; let elapsed = player.pulses_since_start().unwrap(); - let elapsed = clock.timebase().format_beats_1_short(elapsed); + let elapsed = clock.timebase().format_beats_1_short( + (elapsed as usize % length) as f64 + ); format!("▎+{elapsed:>}") } else { String::from("▎") diff --git a/crates/tek_sequencer/src/sequencer_snd.rs b/crates/tek_sequencer/src/sequencer_snd.rs index 41e510fa..63ce248c 100644 --- a/crates/tek_sequencer/src/sequencer_snd.rs +++ b/crates/tek_sequencer/src/sequencer_snd.rs @@ -60,8 +60,8 @@ impl PhrasePlayer { } } /// Return next phrase with starting point - fn enqueued (&self) -> Option<(usize, Arc>)> { - if let (true, Some((start_at, Some(ref phrase)))) = (self.is_rolling(), &self.next_phrase) { + fn enqueued (&self) -> Option<(usize, Option>>)> { + if let (true, Some((start_at, phrase))) = (self.is_rolling(), &self.next_phrase) { Some((start_at.sample().get() as usize, phrase.clone())) } else { None @@ -115,7 +115,7 @@ impl PhrasePlayer { let skipped = sample0 - start; // Switch over to enqueued phrase let started = Instant::from_sample(&self.clock.timebase(), start as f64); - self.phrase = Some((started, Some(phrase))); + self.phrase = Some((started, phrase)); // Unset enqueuement (TODO: where to implement looping?) self.next_phrase = None }