From 2606381d8c5693aa4845b6c2c57e41abe7409a4d Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 18 Oct 2024 16:21:49 +0300 Subject: [PATCH] wip: add note to phrase --- crates/tek_sequencer/src/arranger_tui.rs | 2 +- crates/tek_sequencer/src/sequencer.rs | 2 ++ crates/tek_sequencer/src/sequencer_cmd.rs | 16 ++++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index 994469ff..e40647b6 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -27,7 +27,7 @@ impl Content for Arrangement { ArrangementViewMode::Vertical(factor) => add(&VerticalArranger(&self, factor)) }?; if self.focused { - let commands = "[G]et [S]et [A]dd [I]nsert [D]uplicate [C]olor"; + let commands = "[G]et [S]et [A]dd [I]nsert [D]uplicate [E]dit [C]olor"; let lower_left = Align::SW(commands.push_x(1)); add(&lower_left)?; } diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index 6b3c38b7..88bfaaa9 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -173,6 +173,7 @@ impl PhrasePool { phrase.name = String::from(name.unwrap_or("(no name)")); phrase.color = color.unwrap_or_else(random_color); phrase.length = 4 * PPQ; + phrase.notes = vec![Vec::with_capacity(16);phrase.length]; self.phrases.push(Arc::new(RwLock::new(phrase))); self.phrase = self.phrases.len() - 1; } @@ -181,6 +182,7 @@ impl PhrasePool { phrase.name = String::from(name.unwrap_or("(no name)")); phrase.color = color.unwrap_or_else(random_color); phrase.length = 4 * PPQ; + phrase.notes = vec![Vec::with_capacity(16);phrase.length]; self.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase))); self.phrase += 1; } diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 9ab0debd..301a9be5 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -114,8 +114,20 @@ impl Handle for PhraseEditor { true => {}, false => {}, }, - key!(KeyCode::Char('a')) => if self.entered {}, - key!(KeyCode::Char('i')) => if self.entered {}, + key!(KeyCode::Char('a')) => if self.entered { + if let (Some(phrase), Some(time), Some(note)) = ( + &self.phrase, + self.time_axis.point, + self.note_axis.point, + ) { + let mut phrase = phrase.write().unwrap(); + let key: u7 = u7::from((127 - note) as u8); + let vel: u7 = 100.into(); + phrase.notes[time].push(MidiMessage::NoteOn { key, vel }); + phrase.notes[time + self.note_len].push(MidiMessage::NoteOff { key, vel }); + } + }, + key!(KeyCode::Char('s')) => if self.entered {}, _ => { return Ok(None) } }