diff --git a/crates/tek_chain/src/main.rs b/crates/tek_chain/src/main.rs index 183f5ba0..f5920ff4 100644 --- a/crates/tek_chain/src/main.rs +++ b/crates/tek_chain/src/main.rs @@ -1,8 +1,4 @@ -pub(crate) use tek_core::*; -pub(crate) use tek_core::ratatui::prelude::*; -pub(crate) use tek_jack::*; -pub(crate) use std::sync::RwLockWriteGuard; -submod! { chain chain_view } +include!("lib.rs"); pub fn main () -> Usually<()> { tek_core::run(Arc::new(RwLock::new(crate::Chain::new("todo")?)))?; Ok(()) diff --git a/crates/tek_sampler/Cargo.toml b/crates/tek_sampler/Cargo.toml index 68f516fa..4a138126 100644 --- a/crates/tek_sampler/Cargo.toml +++ b/crates/tek_sampler/Cargo.toml @@ -8,3 +8,10 @@ tek_core = { path = "../tek_core" } tek_jack = { path = "../tek_jack" } symphonia = { version = "0.5.4", features = [ "all" ] } wavers = "1.4.3" + +[lib] +path = "src/lib.rs" + +[[bin]] +name = "tek_sampler" +path = "src/main.rs" diff --git a/crates/tek_sampler/src/bin/mod.rs b/crates/tek_sampler/src/bin/mod.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/crates/tek_sampler/src/lib.rs b/crates/tek_sampler/src/lib.rs index 5ca4760e..39fa852b 100644 --- a/crates/tek_sampler/src/lib.rs +++ b/crates/tek_sampler/src/lib.rs @@ -1,4 +1,4 @@ -//! Sampler (currently 16bit WAVs at system rate; TODO convert/resample) +// Sampler (currently 16bit WAVs at system rate; TODO convert/resample) pub(crate) use tek_core::*; pub(crate) use tek_core::ratatui::prelude::*; diff --git a/crates/tek_sampler/src/main.rs b/crates/tek_sampler/src/main.rs new file mode 100644 index 00000000..d8a0fb98 --- /dev/null +++ b/crates/tek_sampler/src/main.rs @@ -0,0 +1,6 @@ +//! Phrase editor. +include!("lib.rs"); +pub fn main () -> Usually<()> { + tek_core::run(Arc::new(RwLock::new(crate::Sampler::new("sampler", None)?))); + Ok(()) +} diff --git a/crates/tek_sampler/src/sampler.rs b/crates/tek_sampler/src/sampler.rs index 984d1127..7ed25c30 100644 --- a/crates/tek_sampler/src/sampler.rs +++ b/crates/tek_sampler/src/sampler.rs @@ -14,6 +14,8 @@ pub struct Sampler { pub output_gain: f32 } +process!(Sampler = Sampler::process); +handle!(Sampler |self, event| handle_keymap(self, event, KEYMAP_SAMPLER)); render!(Sampler |self, buf, area| { let Rect { x, y, height, .. } = area; let style = Style::default().gray(); @@ -56,8 +58,6 @@ fn draw_sample ( Ok(label1.len() + label2.len() + 4) } -handle!(Sampler |self, event| handle_keymap(self, event, KEYMAP_SAMPLER)); - /// Key bindings for sampler device. pub const KEYMAP_SAMPLER: &'static [KeyBinding] = keymap!(Sampler { [Up, NONE, "/sampler/cursor/up", "move cursor up", |state: &mut Sampler| { @@ -98,7 +98,6 @@ pub const KEYMAP_SAMPLER: &'static [KeyBinding] = keymap!(Sampler { }], }); -process!(Sampler = Sampler::process); impl Sampler { pub fn new (name: &str, mapped: Option>>>) -> Usually { diff --git a/crates/tek_sequencer/Cargo.toml b/crates/tek_sequencer/Cargo.toml index 11350484..0cada3ff 100644 --- a/crates/tek_sequencer/Cargo.toml +++ b/crates/tek_sequencer/Cargo.toml @@ -7,3 +7,10 @@ version = "0.1.0" tek_core = { path = "../tek_core" } tek_jack = { path = "../tek_jack" } tek_timer = { path = "../tek_timer" } + +[lib] +path = "src/lib.rs" + +[[bin]] +name = "tek_sequencer" +path = "src/main.rs" diff --git a/crates/tek_sequencer/src/bin/mod.rs b/crates/tek_sequencer/src/bin/mod.rs deleted file mode 100644 index 6e8c7468..00000000 --- a/crates/tek_sequencer/src/bin/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main () { - panic!() -} diff --git a/crates/tek_sequencer/src/lib.rs b/crates/tek_sequencer/src/lib.rs index fb4aca4f..c83e3a50 100644 --- a/crates/tek_sequencer/src/lib.rs +++ b/crates/tek_sequencer/src/lib.rs @@ -1,10 +1,10 @@ -//! Phrase editor. +/// Phrase editor. pub(crate) use tek_core::*; pub(crate) use tek_core::ratatui::prelude::*; pub(crate) use tek_core::crossterm::event::{KeyCode, KeyModifiers}; pub(crate) use tek_core::midly::{num::u7, live::LiveEvent, MidiMessage}; -pub(crate) use tek_jack::{*, jack::*}; +pub(crate) use tek_jack::jack::*; pub(crate) use tek_timer::*; pub(crate) use std::sync::{Arc, RwLock}; @@ -12,6 +12,7 @@ submod! { midi phrase sequencer + sequencer_control sequencer_track arranger arranger_focus @@ -24,45 +25,3 @@ pubmod! { arranger_view_h arranger_view_v } - -/// Key bindings for phrase editor. -pub const KEYMAP_SEQUENCER: &'static [KeyBinding] = keymap!(Sequencer { - [Up, NONE, "seq_cursor_up", "move cursor up", |sequencer: &mut Sequencer| { - match sequencer.entered { - true => { sequencer.note_axis.point_dec(); }, - false => { sequencer.note_axis.start_dec(); }, - } - Ok(true) - }], - [Down, NONE, "seq_cursor_down", "move cursor down", |sequencer: &mut Sequencer| { - match sequencer.entered { - true => { sequencer.note_axis.point_inc(); }, - false => { sequencer.note_axis.start_inc(); }, - } - Ok(true) - }], - [Left, NONE, "seq_cursor_left", "move cursor up", |sequencer: &mut Sequencer| { - match sequencer.entered { - true => { sequencer.time_axis.point_dec(); }, - false => { sequencer.time_axis.start_dec(); }, - } - Ok(true) - }], - [Right, NONE, "seq_cursor_right", "move cursor up", |sequencer: &mut Sequencer| { - match sequencer.entered { - true => { sequencer.time_axis.point_inc(); }, - false => { sequencer.time_axis.start_inc(); }, - } - Ok(true) - }], - [Char('`'), NONE, "seq_mode_switch", "switch the display mode", |sequencer: &mut Sequencer| { - sequencer.mode = !sequencer.mode; - Ok(true) - }], - /* - [Char('a'), NONE, "note_add", "Add note", note_add], - [Char('z'), NONE, "note_del", "Delete note", note_del], - [CapsLock, NONE, "advance", "Toggle auto advance", nop], - [Char('w'), NONE, "rest", "Advance by note duration", nop], - */ -}); diff --git a/crates/tek_sequencer/src/main.rs b/crates/tek_sequencer/src/main.rs new file mode 100644 index 00000000..c93a9078 --- /dev/null +++ b/crates/tek_sequencer/src/main.rs @@ -0,0 +1,6 @@ +//! Phrase editor. +include!("lib.rs"); +pub fn main () -> Usually<()> { + tek_core::run(Arc::new(RwLock::new(crate::Sequencer::new())))?; + Ok(()) +} diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index a08beef7..c704b9c7 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -29,6 +29,8 @@ render!(Sequencer |self, buf, area| { Ok(area) }); +handle!(Sequencer |self, e| handle_keymap(self, e, KEYMAP_SEQUENCER)); + impl Sequencer { pub fn new () -> Self { Self { diff --git a/crates/tek_sequencer/src/sequencer_control.rs b/crates/tek_sequencer/src/sequencer_control.rs new file mode 100644 index 00000000..8df67551 --- /dev/null +++ b/crates/tek_sequencer/src/sequencer_control.rs @@ -0,0 +1,43 @@ +use crate::*; + +/// Key bindings for phrase editor. +pub const KEYMAP_SEQUENCER: &'static [KeyBinding] = keymap!(Sequencer { + [Up, NONE, "seq_cursor_up", "move cursor up", |sequencer: &mut Sequencer| { + match sequencer.entered { + true => { sequencer.note_axis.point_dec(); }, + false => { sequencer.note_axis.start_dec(); }, + } + Ok(true) + }], + [Down, NONE, "seq_cursor_down", "move cursor down", |sequencer: &mut Sequencer| { + match sequencer.entered { + true => { sequencer.note_axis.point_inc(); }, + false => { sequencer.note_axis.start_inc(); }, + } + Ok(true) + }], + [Left, NONE, "seq_cursor_left", "move cursor up", |sequencer: &mut Sequencer| { + match sequencer.entered { + true => { sequencer.time_axis.point_dec(); }, + false => { sequencer.time_axis.start_dec(); }, + } + Ok(true) + }], + [Right, NONE, "seq_cursor_right", "move cursor up", |sequencer: &mut Sequencer| { + match sequencer.entered { + true => { sequencer.time_axis.point_inc(); }, + false => { sequencer.time_axis.start_inc(); }, + } + Ok(true) + }], + [Char('`'), NONE, "seq_mode_switch", "switch the display mode", |sequencer: &mut Sequencer| { + sequencer.mode = !sequencer.mode; + Ok(true) + }], + /* + [Char('a'), NONE, "note_add", "Add note", note_add], + [Char('z'), NONE, "note_del", "Delete note", note_del], + [CapsLock, NONE, "advance", "Toggle auto advance", nop], + [Char('w'), NONE, "rest", "Advance by note duration", nop], + */ +});