From 85a144798b0a60decc76315207533d79138c3815 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sun, 11 May 2025 04:01:23 +0300 Subject: [PATCH] editor: add note and advance; preparations --- config/keys_editor.edn | 39 +++++++++---------- crates/app/src/api.rs | 2 +- crates/device/src/editor/editor_api.rs | 49 +++++++++++++----------- crates/device/src/editor/editor_model.rs | 2 +- 4 files changed, 47 insertions(+), 45 deletions(-) diff --git a/config/keys_editor.edn b/config/keys_editor.edn index 09c225f6..64523ac7 100644 --- a/config/keys_editor.edn +++ b/config/keys_editor.edn @@ -1,25 +1,24 @@ -(@up editor note-pos :note-pos-next) -(@down editor note-pos :note-pos-prev) -(@pgup editor note-pos :note-pos-next-octave) -(@pgdn editor note-pos :note-pos-prev-octave) +(@left editor set-time-pos :time-pos-prev) +(@right editor set-time-pos :time-pos-next) -(@comma editor note-len :note-len-prev) -(@period editor note-len :note-len-next) -(@lt editor note-len :note-len-prev) -(@gt editor note-len :note-len-next) +(@equal editor set-time-zoom :time-zoom-prev) +(@minus editor set-time-zoom :time-zoom-next) +(@plus editor set-time-zoom :time-zoom-next-fine) +(@underscore editor set-time-zoom :time-zoom-prev-fine) -(@plus editor note-range :note-range-next) -(@underscore editor note-range :note-range-prev) +(@z editor set-time-lock) -(@left editor time-pos :time-pos-prev) -(@right editor time-pos :time-pos-next) +(@up editor set-note-pos :note-pos-next) +(@down editor set-note-pos :note-pos-prev) +(@pgup editor set-note-pos :note-pos-next-octave) +(@pgdn editor set-note-pos :note-pos-prev-octave) -(@equal editor time-zoom :time-zoom-prev) -(@minus editor time-zoom :time-zoom-next) +(@comma editor set-note-len :note-len-prev) +(@period editor set-note-len :note-len-next) +(@lt editor set-note-len :note-len-prev) +(@gt editor set-note-len :note-len-next) -(@z editor time-lock) - -(@enter editor note-put) -(@shift-enter editor note-append) -(@del editor note-del) -(@shift-del editor note-del) +(@a editor append-note :true) +(@enter editor append-note :false) +(@del editor delete-note) +(@shift-del editor delete-note) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index ce88fe99..f601ad70 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -280,7 +280,7 @@ handle!(TuiIn: |self: App, input|Ok(if let Some(command) = self.config.keys.comm // update linked sampler after editor action app.sampler_mut().map(|sampler|match command { // autoselect: automatically select sample in sampler - MidiEditCommand::NotePos { pos } => { sampler.set_note_pos(pos); }, + MidiEditCommand::SetNotePos { pos } => { sampler.set_note_pos(pos); }, _ => {} }); undo diff --git a/crates/device/src/editor/editor_api.rs b/crates/device/src/editor/editor_api.rs index a1c6a6e5..85748cae 100644 --- a/crates/device/src/editor/editor_api.rs +++ b/crates/device/src/editor/editor_api.rs @@ -4,12 +4,6 @@ use crate::*; fn _todo_opt_clip_stub (&self) -> Option>> { todo!() } - fn time_lock (&self) -> bool { - self.get_time_lock() - } - fn time_lock_toggled (&self) -> bool { - !self.get_time_lock() - } fn note_length (&self) -> usize { self.get_note_len() @@ -55,10 +49,10 @@ use crate::*; self.get_time_pos() } fn time_pos_next (&self) -> usize { - self.get_time_pos() + self.time_zoom() + self.get_time_pos() + self.get_note_len() } fn time_pos_prev (&self) -> usize { - self.get_time_pos().saturating_sub(self.time_zoom()) + self.get_time_pos().saturating_sub(self.get_note_len()) } fn time_zoom (&self) -> usize { @@ -67,29 +61,37 @@ use crate::*; fn time_zoom_next (&self) -> usize { self.get_time_zoom() + 1 } + fn time_zoom_next_fine (&self) -> usize { + self.get_time_zoom() + 1 + } fn time_zoom_prev (&self) -> usize { self.get_time_zoom().saturating_sub(1).max(1) } + fn time_zoom_prev_fine (&self) -> usize { + self.get_time_zoom().saturating_sub(1).max(1) + } + + fn time_lock (&self) -> bool { + self.get_time_lock() + } + fn time_lock_toggled (&self) -> bool { + !self.get_time_lock() + } } #[tengri_proc::command(MidiEditor)] impl MidiEditCommand { - // TODO: 1-9 seek markers that by default start every 8th of the clip - fn note_append (editor: &mut MidiEditor) -> Perhaps { - editor.put_note(true); + fn append_note (editor: &mut MidiEditor, advance: bool) -> Perhaps { + editor.put_note(advance); Ok(None) } - fn note_put (editor: &mut MidiEditor) -> Perhaps { - editor.put_note(false); - Ok(None) - } - fn note_del (_editor: &mut MidiEditor) -> Perhaps { + fn delete_note (_editor: &mut MidiEditor) -> Perhaps { todo!() } - fn note_pos (editor: &mut MidiEditor, pos: usize) -> Perhaps { + fn set_note_pos (editor: &mut MidiEditor, pos: usize) -> Perhaps { editor.set_note_pos(pos.min(127)); Ok(None) } - fn note_len (editor: &mut MidiEditor, value: usize) -> Perhaps { + fn set_note_len (editor: &mut MidiEditor, value: usize) -> Perhaps { //let note_len = editor.get_note_len(); //let time_zoom = editor.get_time_zoom(); editor.set_note_len(value); @@ -98,24 +100,24 @@ use crate::*; //} Ok(None) } - fn note_scroll (editor: &mut MidiEditor, value: usize) -> Perhaps { + fn set_note_scroll (editor: &mut MidiEditor, value: usize) -> Perhaps { editor.set_note_lo(value.min(127)); Ok(None) } - fn time_pos (editor: &mut MidiEditor, value: usize) -> Perhaps { + fn set_time_pos (editor: &mut MidiEditor, value: usize) -> Perhaps { editor.set_time_pos(value); Ok(None) } - fn time_scroll (editor: &mut MidiEditor, value: usize) -> Perhaps { + fn set_time_scroll (editor: &mut MidiEditor, value: usize) -> Perhaps { editor.set_time_start(value); Ok(None) } - fn time_zoom (editor: &mut MidiEditor, value: usize) -> Perhaps { + fn set_time_zoom (editor: &mut MidiEditor, value: usize) -> Perhaps { editor.set_time_zoom(value); editor.redraw(); Ok(None) } - fn time_lock (editor: &mut MidiEditor, value: bool) -> Perhaps { + fn set_time_lock (editor: &mut MidiEditor, value: bool) -> Perhaps { editor.set_time_lock(value); Ok(None) } @@ -123,4 +125,5 @@ use crate::*; editor.set_clip(clip.as_ref()); Ok(None) } + // TODO: 1-9 seek markers that by default start every 8th of the clip } diff --git a/crates/device/src/editor/editor_model.rs b/crates/device/src/editor/editor_model.rs index a92e96ba..90d6d2ee 100644 --- a/crates/device/src/editor/editor_model.rs +++ b/crates/device/src/editor/editor_model.rs @@ -61,7 +61,7 @@ impl MidiEditor { clip.notes[note_end].push(note_off); } if advance { - self.set_time_pos(note_end); + self.set_time_pos(note_end + 1); } redraw = true; }