From 58bb25eb40ead0011698b91b405bc1221ee29e7e Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 27 Dec 2024 08:35:29 +0100 Subject: [PATCH] PhrasePlayerModel -> MidiPlayer --- crates/tek/src/midi.rs | 24 ++++++++++++------------ crates/tek/src/tui/app_sequencer.rs | 4 ++-- crates/tek/src/tui/arranger_mode.rs | 3 --- crates/tek/src/tui/arranger_scene.rs | 3 --- crates/tek/src/tui/arranger_select.rs | 2 -- crates/tek/src/tui/arranger_track.rs | 10 ++-------- crates/tek/src/tui/arranger_v.rs | 4 ---- 7 files changed, 16 insertions(+), 34 deletions(-) diff --git a/crates/tek/src/midi.rs b/crates/tek/src/midi.rs index 7b72810e..8a4fb75c 100644 --- a/crates/tek/src/midi.rs +++ b/crates/tek/src/midi.rs @@ -59,7 +59,7 @@ pub const MIDI_NOTE_NAMES: [&str; 128] = [ pub trait MidiPlayerApi: MidiRecordApi + MidiPlaybackApi + Send + Sync {} -impl MidiPlayerApi for PhrasePlayerModel {} +impl MidiPlayerApi for MidiPlayer {} pub trait HasPlayer { fn player (&self) -> &impl MidiPlayerApi; @@ -76,7 +76,7 @@ pub trait HasPlayer { } /// Contains state for playing a phrase -pub struct PhrasePlayerModel { +pub struct MidiPlayer { /// State of clock and playhead pub(crate) clock: ClockModel, /// Start time and phrase being played @@ -102,16 +102,16 @@ pub struct PhrasePlayerModel { /// MIDI output buffer pub note_buf: Vec, } -impl std::fmt::Debug for PhrasePlayerModel { +impl std::fmt::Debug for MidiPlayer { fn fmt (&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> { - f.debug_struct("PhrasePlayerModel") + f.debug_struct("MidiPlayer") .field("clock", &self.clock) .field("play_phrase", &self.play_phrase) .field("next_phrase", &self.next_phrase) .finish() } } -from!(|clock: &ClockModel| PhrasePlayerModel = Self { +from!(|clock: &ClockModel| MidiPlayer = Self { clock: clock.clone(), midi_ins: vec![], midi_outs: vec![], @@ -125,15 +125,15 @@ from!(|clock: &ClockModel| PhrasePlayerModel = Self { notes_in: RwLock::new([false;128]).into(), notes_out: RwLock::new([false;128]).into(), }); -from!(|state: (&ClockModel, &Arc>)|PhrasePlayerModel = { +from!(|state: (&ClockModel, &Arc>)|MidiPlayer = { let (clock, phrase) = state; let mut model = Self::from(clock); model.play_phrase = Some((Moment::zero(&clock.timebase), Some(phrase.clone()))); model }); -has_clock!(|self:PhrasePlayerModel|&self.clock); +has_clock!(|self: MidiPlayer|&self.clock); -impl HasMidiIns for PhrasePlayerModel { +impl HasMidiIns for MidiPlayer { fn midi_ins (&self) -> &Vec> { &self.midi_ins } @@ -142,7 +142,7 @@ impl HasMidiIns for PhrasePlayerModel { } } -impl HasMidiOuts for PhrasePlayerModel { +impl HasMidiOuts for MidiPlayer { fn midi_outs (&self) -> &Vec> { &self.midi_outs } @@ -191,7 +191,7 @@ impl<'a, T: MidiPlayerApi> Audio for PlayerAudio<'a, T> { } } -impl MidiRecordApi for PhrasePlayerModel { +impl MidiRecordApi for MidiPlayer { fn recording (&self) -> bool { self.recording } @@ -215,13 +215,13 @@ impl MidiRecordApi for PhrasePlayerModel { } } -impl MidiPlaybackApi for PhrasePlayerModel { +impl MidiPlaybackApi for MidiPlayer { fn notes_out (&self) -> &Arc> { &self.notes_in } } -impl HasPlayPhrase for PhrasePlayerModel { +impl HasPlayPhrase for MidiPlayer { fn reset (&self) -> bool { self.reset } diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index fbf5dd44..97ec300f 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -9,7 +9,7 @@ pub struct SequencerTui { _jack: Arc>, pub(crate) clock: ClockModel, pub(crate) phrases: PoolModel, - pub(crate) player: PhrasePlayerModel, + pub(crate) player: MidiPlayer, pub(crate) editor: PhraseEditorModel, pub(crate) size: Measure, pub(crate) status: bool, @@ -27,7 +27,7 @@ from_jack!(|jack|SequencerTui { _jack: jack.clone(), phrases: PoolModel::from(&phrase), editor: PhraseEditorModel::from(&phrase), - player: PhrasePlayerModel::from((&clock, &phrase)), + player: MidiPlayer::from((&clock, &phrase)), size: Measure::new(), midi_buf: vec![vec![];65536], note_buf: vec![], diff --git a/crates/tek/src/tui/arranger_mode.rs b/crates/tek/src/tui/arranger_mode.rs index c28d8b7f..c415d12a 100644 --- a/crates/tek/src/tui/arranger_mode.rs +++ b/crates/tek/src/tui/arranger_mode.rs @@ -1,5 +1,4 @@ use crate::*; - /// Display mode of arranger #[derive(Clone, PartialEq)] pub enum ArrangerMode { @@ -9,7 +8,6 @@ pub enum ArrangerMode { H, } render!(|self: ArrangerMode|{}); - /// Arranger display mode can be cycled impl ArrangerMode { /// Cycle arranger display mode @@ -23,7 +21,6 @@ impl ArrangerMode { } } } - fn any_size (_: E::Size) -> Perhaps{ Ok(Some([0.into(),0.into()].into())) } diff --git a/crates/tek/src/tui/arranger_scene.rs b/crates/tek/src/tui/arranger_scene.rs index ddbf3114..2bdb3a48 100644 --- a/crates/tek/src/tui/arranger_scene.rs +++ b/crates/tek/src/tui/arranger_scene.rs @@ -1,5 +1,4 @@ use crate::*; - impl ArrangerTui { pub fn scene_add (&mut self, name: Option<&str>, color: Option) -> Usually<&mut ArrangerScene> @@ -27,7 +26,6 @@ impl ArrangerTui { self.selected.scene().map(|s|self.scenes.get_mut(s)).flatten() } } - #[derive(Default, Debug, Clone)] pub struct ArrangerScene { /// Name of scene pub(crate) name: Arc>, @@ -36,7 +34,6 @@ impl ArrangerTui { /// Identifying color of scene pub(crate) color: ItemPalette, } - impl ArrangerScene { pub fn name (&self) -> &Arc> { &self.name diff --git a/crates/tek/src/tui/arranger_select.rs b/crates/tek/src/tui/arranger_select.rs index ca5afe6a..e9d3ffc6 100644 --- a/crates/tek/src/tui/arranger_select.rs +++ b/crates/tek/src/tui/arranger_select.rs @@ -1,5 +1,4 @@ use crate::*; - #[derive(PartialEq, Clone, Copy, Debug)] /// Represents the current user selection in the arranger pub enum ArrangerSelection { @@ -12,7 +11,6 @@ pub enum ArrangerSelection { /// A clip (track × scene) is selected. Clip(usize, usize), } - /// Focus identification methods impl ArrangerSelection { pub fn description ( diff --git a/crates/tek/src/tui/arranger_track.rs b/crates/tek/src/tui/arranger_track.rs index bc3e6db9..390d93f5 100644 --- a/crates/tek/src/tui/arranger_track.rs +++ b/crates/tek/src/tui/arranger_track.rs @@ -1,5 +1,4 @@ use crate::*; - impl ArrangerTui { pub fn track_next_name (&self) -> String { format!("T{}", self.tracks.len() + 1) @@ -12,7 +11,7 @@ impl ArrangerTui { width: name.len() + 2, name: Arc::new(name.into()), color: color.unwrap_or_else(||ItemPalette::random()), - player: PhrasePlayerModel::from(&self.clock), + player: MidiPlayer::from(&self.clock), }; self.tracks.push(track); let index = self.tracks.len() - 1; @@ -25,7 +24,6 @@ impl ArrangerTui { } } } - #[derive(Debug)] pub struct ArrangerTrack { /// Name of track pub(crate) name: Arc>, @@ -34,12 +32,10 @@ impl ArrangerTui { /// Identifying color of track pub(crate) color: ItemPalette, /// MIDI player state - pub(crate) player: PhrasePlayerModel, + pub(crate) player: MidiPlayer, } - has_clock!(|self:ArrangerTrack|self.player.clock()); has_player!(|self:ArrangerTrack|self.player); - impl ArrangerTrack { pub fn widths (tracks: &[Self]) -> Vec<(usize, usize)> { let mut widths = vec![]; @@ -91,7 +87,6 @@ impl ArrangerTrack { } } } - /// Hosts the JACK callback for a collection of tracks pub struct TracksAudio<'a>( // Track collection @@ -101,7 +96,6 @@ pub struct TracksAudio<'a>( /// Note chunk buffer pub &'a mut Vec>>, ); - impl<'a> Audio for TracksAudio<'a> { #[inline] fn process (&mut self, client: &Client, scope: &ProcessScope) -> Control { let model = &mut self.0; diff --git a/crates/tek/src/tui/arranger_v.rs b/crates/tek/src/tui/arranger_v.rs index 9f35c3ee..ff2a774e 100644 --- a/crates/tek/src/tui/arranger_v.rs +++ b/crates/tek/src/tui/arranger_v.rs @@ -1,14 +1,11 @@ use crate::*; - mod v_clips; pub(crate) use self::v_clips::*; mod v_cursor; pub(crate) use self::v_cursor::*; mod v_head; pub(crate) use self::v_head::*; mod v_io; pub(crate) use self::v_io::*; mod v_sep; pub(crate) use self::v_sep::*; - const HEADER_H: u16 = 5; const SCENES_W_OFFSET: u16 = 3; - impl ArrangerTui { pub fn render_mode_v (state: &ArrangerTui, factor: usize) -> impl Render + use<'_> { lay!([ @@ -24,4 +21,3 @@ impl ArrangerTui { ]) } } -