From a659062dbc59a808866c2998b9400736477999c1 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 10 Aug 2024 21:23:20 +0300 Subject: [PATCH] refactor: merge plugin, sampler -> mixer; transport -> sequencer; time -> core --- Cargo.lock | 36 ++----------------- crates/tek/Cargo.toml | 5 +-- crates/tek/src/app.rs | 5 ++- crates/tek/src/control.rs | 24 +++++++------ crates/tek/src/main.rs | 2 +- crates/tek_core/Cargo.toml | 1 + crates/tek_core/src/lib.rs | 10 ++++-- crates/tek_core/src/render.rs | 9 +++++ .../timebase.rs => tek_core/src/time_base.rs} | 0 .../src/lib.rs => tek_core/src/time_note.rs} | 14 -------- .../ticks.rs => tek_core/src/time_tick.rs} | 2 -- crates/tek_mixer/Cargo.toml | 21 +++++++---- crates/tek_mixer/README.md | 11 +++++- crates/tek_mixer/src/lib.rs | 18 ++++++++++ .../{tek_plugin => tek_mixer}/src/plugin.rs | 0 .../lv2.rs => tek_mixer/src/plugin_lv2.rs} | 0 .../src/plugin_lv2_gui.rs} | 0 .../main.rs => tek_mixer/src/plugin_main.rs} | 0 .../vst2.rs => tek_mixer/src/plugin_vst2.rs} | 0 crates/tek_mixer/src/plugin_vst3.rs | 1 + .../{tek_sampler => tek_mixer}/src/sample.rs | 0 .../src/sample_add.rs | 0 .../{tek_sampler => tek_mixer}/src/sampler.rs | 0 .../src/sampler_edn.rs | 0 .../main.rs => tek_mixer/src/sampler_main.rs} | 0 .../{tek_sampler => tek_mixer}/src/voice.rs | 0 crates/tek_plugin/Cargo.toml | 20 ----------- crates/tek_plugin/README.md | 4 --- crates/tek_plugin/src/lib.rs | 16 --------- crates/tek_plugin/src/vst3.rs | 1 - crates/tek_sampler/Cargo.toml | 17 --------- crates/tek_sampler/README.md | 4 --- crates/tek_sampler/src/lib.rs | 20 ----------- crates/tek_sequencer/Cargo.toml | 5 ++- crates/tek_sequencer/README.md | 20 +++++++++++ crates/tek_sequencer/src/arranger.rs | 10 ++++++ crates/tek_sequencer/src/arranger_cli.rs | 1 - crates/tek_sequencer/src/lib.rs | 19 +++++----- crates/tek_sequencer/src/sequencer_cli.rs | 1 - .../src/transport.rs | 0 .../src/transport_focus.rs | 0 .../src/transport_handle.rs | 0 .../src/transport_main.rs | 0 .../src/transport_render.rs | 0 crates/tek_timer/Cargo.toml | 16 --------- crates/tek_timer/README.md | 13 ------- 46 files changed, 128 insertions(+), 198 deletions(-) rename crates/{tek_timer/src/timebase.rs => tek_core/src/time_base.rs} (100%) rename crates/{tek_timer/src/lib.rs => tek_core/src/time_note.rs} (77%) rename crates/{tek_timer/src/ticks.rs => tek_core/src/time_tick.rs} (99%) rename crates/{tek_plugin => tek_mixer}/src/plugin.rs (100%) rename crates/{tek_plugin/src/lv2.rs => tek_mixer/src/plugin_lv2.rs} (100%) rename crates/{tek_plugin/src/lv2_gui.rs => tek_mixer/src/plugin_lv2_gui.rs} (100%) rename crates/{tek_plugin/src/main.rs => tek_mixer/src/plugin_main.rs} (100%) rename crates/{tek_plugin/src/vst2.rs => tek_mixer/src/plugin_vst2.rs} (100%) create mode 100644 crates/tek_mixer/src/plugin_vst3.rs rename crates/{tek_sampler => tek_mixer}/src/sample.rs (100%) rename crates/{tek_sampler => tek_mixer}/src/sample_add.rs (100%) rename crates/{tek_sampler => tek_mixer}/src/sampler.rs (100%) rename crates/{tek_sampler => tek_mixer}/src/sampler_edn.rs (100%) rename crates/{tek_sampler/src/main.rs => tek_mixer/src/sampler_main.rs} (100%) rename crates/{tek_sampler => tek_mixer}/src/voice.rs (100%) delete mode 100644 crates/tek_plugin/Cargo.toml delete mode 100644 crates/tek_plugin/README.md delete mode 100644 crates/tek_plugin/src/lib.rs delete mode 100644 crates/tek_plugin/src/vst3.rs delete mode 100644 crates/tek_sampler/Cargo.toml delete mode 100644 crates/tek_sampler/README.md delete mode 100644 crates/tek_sampler/src/lib.rs rename crates/{tek_timer => tek_sequencer}/src/transport.rs (100%) rename crates/{tek_timer => tek_sequencer}/src/transport_focus.rs (100%) rename crates/{tek_timer => tek_sequencer}/src/transport_handle.rs (100%) rename crates/{tek_timer => tek_sequencer}/src/transport_main.rs (100%) rename crates/{tek_timer => tek_sequencer}/src/transport_render.rs (100%) delete mode 100644 crates/tek_timer/Cargo.toml delete mode 100644 crates/tek_timer/README.md diff --git a/Cargo.lock b/Cargo.lock index 6ebe7c5e..aa487fb5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2514,16 +2514,14 @@ dependencies = [ "tek_core", "tek_jack", "tek_mixer", - "tek_plugin", - "tek_sampler", "tek_sequencer", - "tek_timer", ] [[package]] name = "tek_core" version = "0.1.0" dependencies = [ + "atomic_float", "backtrace", "better-panic", "clap", @@ -2546,33 +2544,15 @@ dependencies = [ [[package]] name = "tek_mixer" version = "0.1.0" -dependencies = [ - "tek_core", - "tek_jack", - "tek_plugin", - "tek_sampler", -] - -[[package]] -name = "tek_plugin" -version = "0.1.0" dependencies = [ "livi", "suil-rs", - "tek_core", - "tek_jack", - "vst", - "winit", -] - -[[package]] -name = "tek_sampler" -version = "0.1.0" -dependencies = [ "symphonia", "tek_core", "tek_jack", + "vst", "wavers", + "winit", ] [[package]] @@ -2581,16 +2561,6 @@ version = "0.1.0" dependencies = [ "tek_core", "tek_jack", - "tek_timer", -] - -[[package]] -name = "tek_timer" -version = "0.1.0" -dependencies = [ - "atomic_float", - "tek_core", - "tek_jack", ] [[package]] diff --git a/crates/tek/Cargo.toml b/crates/tek/Cargo.toml index 8abb2a4f..893cec66 100644 --- a/crates/tek/Cargo.toml +++ b/crates/tek/Cargo.toml @@ -9,11 +9,8 @@ microxdg = "0.1.2" tek_core = { path = "../tek_core" } tek_jack = { path = "../tek_jack" } -tek_plugin = { path = "../tek_plugin" } -tek_sampler = { path = "../tek_sampler" } tek_sequencer = { path = "../tek_sequencer" } -tek_timer = { path = "../tek_timer" } -tek_mixer = { path = "../tek_mixer", features = ["standalone_devices"] } +tek_mixer = { path = "../tek_mixer" } #jack = "0.10" #crossterm = "0.27" #ratatui = { version = "0.26.3", features = [ "unstable-widget-ref", "underline-color" ] } diff --git a/crates/tek/src/app.rs b/crates/tek/src/app.rs index 5e6d1044..a43b2163 100644 --- a/crates/tek/src/app.rs +++ b/crates/tek/src/app.rs @@ -1,7 +1,6 @@ use crate::*; use tek_core::Direction; -use tek_timer::TransportToolbar; -use tek_sequencer::Arranger; +use tek_sequencer::{TransportToolbar, Arranger}; use tek_mixer::Mixer; /// Root of application state. @@ -108,7 +107,7 @@ render!(App |self, buf, area| { focused: self.section == AppFocus::Chain, chain: self.mixer.track() }, - &self.arranger.sequencer, + &self.arranger.sequencer(), ])) ]).render(buf, area)?; if let Some(ref modal) = *MODAL.lock().unwrap() { diff --git a/crates/tek/src/control.rs b/crates/tek/src/control.rs index bf23d36a..1c3c0f67 100644 --- a/crates/tek/src/control.rs +++ b/crates/tek/src/control.rs @@ -39,8 +39,8 @@ fn handle_modal (e: &AppEvent) -> Usually { fn handle_focused (state: &mut App, e: &AppEvent) -> Usually { match state.section { AppFocus::Transport => state.transport.handle(e), - AppFocus::Arranger => state.arranger.sequencer.handle(e), - AppFocus::Sequencer => state.arranger.sequencer.handle(e), + AppFocus::Arranger => state.arranger.sequencer_mut().map(|s|s.handle(e)), + AppFocus::Sequencer => state.arranger.sequencer_mut().map(|s|s.handle(e)), AppFocus::Chain => Ok(false)/*if state.entered { handle_device(state, e)? || handle_keymap(state, e, crate::control::KEYMAP_CHAIN)? @@ -85,11 +85,11 @@ pub const KEYMAP_GLOBAL: &'static [KeyBinding] = keymap!(App { Ok(true) }], [Char('='), NONE, "zoom_in", "show fewer ticks per block", |app: &mut App| { - app.arranger.sequencer.time_axis.scale_mut(&prev_note_length); + app.arranger.sequencer_mut().map(|s|s.time_axis.scale_mut(&prev_note_length)); Ok(true) }], [Char('-'), NONE, "zoom_out", "show more ticks per block", |app: &mut App| { - app.arranger.sequencer.time_axis.scale_mut(&next_note_length); + app.arranger.sequencer_mut().map(|s|s.time_axis.scale_mut(&next_note_length)); Ok(true) }], [Char('x'), NONE, "extend", "double the current clip", |app: &mut App| { @@ -144,14 +144,14 @@ pub const KEYMAP_FOCUS: &'static [KeyBinding] = keymap!(App { app.entered = false; app.transport.entered = app.entered; app.arranger.entered = app.entered; - app.arranger.sequencer.entered = app.entered; + app.arranger.sequencer_mut().map(|s|s.entered = app.entered); Ok(true) }], [Enter, NONE, "focus_enter", "activate item at cursor", |app: &mut App|{ app.entered = true; app.transport.entered = app.entered; app.arranger.entered = app.entered; - app.arranger.sequencer.entered = app.entered; + app.arranger.sequencer_mut().map(|s|s.entered = app.entered); Ok(true) }], }); @@ -162,8 +162,10 @@ pub fn focus_next (app: &mut App) -> Usually { app.transport.entered = app.entered; app.arranger.focused = app.section == AppFocus::Arranger; app.arranger.entered = app.entered; - app.arranger.sequencer.focused = app.section == AppFocus::Sequencer; - app.arranger.sequencer.entered = app.entered; + app.arranger.sequencer_mut().map(|s|{ + s.focused = app.section == AppFocus::Sequencer; + s.entered = app.entered; + }); Ok(true) } @@ -173,7 +175,9 @@ pub fn focus_prev (app: &mut App) -> Usually { app.transport.entered = app.entered; app.arranger.focused = app.section == AppFocus::Arranger; app.arranger.entered = app.entered; - app.arranger.sequencer.focused = app.section == AppFocus::Sequencer; - app.arranger.sequencer.entered = app.entered; + app.arranger.sequencer_mut().map(|s|{ + s.focused = app.section == AppFocus::Sequencer; + s.entered = app.entered; + }); Ok(true) } diff --git a/crates/tek/src/main.rs b/crates/tek/src/main.rs index a2c1f866..87a1ba91 100644 --- a/crates/tek/src/main.rs +++ b/crates/tek/src/main.rs @@ -9,7 +9,7 @@ pub(crate) use tek_core::*; pub(crate) use tek_jack::{*, jack::*}; -pub(crate) use tek_timer::*; +pub(crate) use tek_sequencer::*; pub(crate) use microxdg::XdgApp; submod! { diff --git a/crates/tek_core/Cargo.toml b/crates/tek_core/Cargo.toml index 57540625..1d1e1666 100644 --- a/crates/tek_core/Cargo.toml +++ b/crates/tek_core/Cargo.toml @@ -13,3 +13,4 @@ midly = "0.5" clap = { version = "4.5.4", features = [ "derive" ] } clojure-reader = "0.1.0" once_cell = "1.19.0" +atomic_float = "1.0.0" diff --git a/crates/tek_core/src/lib.rs b/crates/tek_core/src/lib.rs index de05a0bf..a1e45ff0 100644 --- a/crates/tek_core/src/lib.rs +++ b/crates/tek_core/src/lib.rs @@ -9,12 +9,13 @@ pub use ratatui::prelude::{Rect, Style, Color, Buffer}; pub use ratatui::style::Stylize; pub use clojure_reader::{edn::{read, Edn}, error::Error as EdnError}; pub use once_cell::sync::Lazy; +pub use std::sync::atomic::{Ordering, AtomicBool}; pub(crate) use std::error::Error; pub(crate) use std::io::{stdout}; pub(crate) use std::thread::{spawn, JoinHandle}; pub(crate) use std::time::Duration; -pub(crate) use std::sync::atomic::{Ordering, AtomicBool}; +pub(crate) use atomic_float::*; //, LockResult, RwLockReadGuard, RwLockWriteGuard}; //pub(crate) use std::path::PathBuf; //pub(crate) use std::fs::read_dir; @@ -41,7 +42,12 @@ use crossterm::terminal::{ } submod! { - exit render handle + exit + render + handle + time_base + time_note + time_tick } /// EDN parsing helper. diff --git a/crates/tek_core/src/render.rs b/crates/tek_core/src/render.rs index 582d4438..98d5edd1 100644 --- a/crates/tek_core/src/render.rs +++ b/crates/tek_core/src/render.rs @@ -145,6 +145,15 @@ impl Render for () { } } +impl Render for Option { + fn render (&self, b: &mut Buffer, a: Rect) -> Usually { + match self { + Some(widget) => widget.render(b, a), + None => ().render(b, a), + } + } +} + impl Usually + Send> Render for T { fn render (&self, b: &mut Buffer, a: Rect) -> Usually { (*self)(b, a) diff --git a/crates/tek_timer/src/timebase.rs b/crates/tek_core/src/time_base.rs similarity index 100% rename from crates/tek_timer/src/timebase.rs rename to crates/tek_core/src/time_base.rs diff --git a/crates/tek_timer/src/lib.rs b/crates/tek_core/src/time_note.rs similarity index 77% rename from crates/tek_timer/src/lib.rs rename to crates/tek_core/src/time_note.rs index ace16f86..0fcdd4bf 100644 --- a/crates/tek_timer/src/lib.rs +++ b/crates/tek_core/src/time_note.rs @@ -1,17 +1,3 @@ -pub(crate) use tek_core::*; -pub(crate) use tek_core::crossterm::event::{KeyCode, KeyModifiers}; -pub(crate) use tek_jack::{*, jack::*}; -pub(crate) use std::sync::{Arc, atomic::Ordering}; -pub(crate) use atomic_float::AtomicF64; -submod! { - timebase - ticks - transport - transport_focus - transport_handle - transport_render -} - /// (pulses, name) pub const NOTE_DURATIONS: [(usize, &str);26] = [ (1, "1/384"), diff --git a/crates/tek_timer/src/ticks.rs b/crates/tek_core/src/time_tick.rs similarity index 99% rename from crates/tek_timer/src/ticks.rs rename to crates/tek_core/src/time_tick.rs index 2f3c4d00..7102c8bb 100644 --- a/crates/tek_timer/src/ticks.rs +++ b/crates/tek_core/src/time_tick.rs @@ -1,5 +1,3 @@ -use crate::*; - /// Defines frames per tick. pub struct Ticks(pub f64); diff --git a/crates/tek_mixer/Cargo.toml b/crates/tek_mixer/Cargo.toml index b7f1284c..f0a693d3 100644 --- a/crates/tek_mixer/Cargo.toml +++ b/crates/tek_mixer/Cargo.toml @@ -6,13 +6,14 @@ version = "0.1.0" [dependencies] tek_core = { path = "../tek_core" } tek_jack = { path = "../tek_jack" } -tek_sampler = { path = "../tek_sampler", optional = true } -tek_plugin = { path = "../tek_plugin", optional = true } -[features] -standalone_devices = [ "sampler", "plugin" ] -sampler = [ "tek_sampler" ] -plugin = [ "tek_plugin" ] +livi = "0.7.4" +suil-rs = { path = "../suil" } +symphonia = { version = "0.5.4", features = [ "all" ] } +vst = "0.4.0" +#vst3 = "0.1.0" +wavers = "1.4.3" +winit = { version = "0.30.4", features = [ "x11" ] } [lib] path = "src/lib.rs" @@ -24,3 +25,11 @@ path = "src/mixer_main.rs" [[bin]] name = "tek_track" path = "src/track_main.rs" + +[[bin]] +name = "tek_sampler" +path = "src/sampler_main.rs" + +[[bin]] +name = "tek_plugin" +path = "src/sampler_main.rs" diff --git a/crates/tek_mixer/README.md b/crates/tek_mixer/README.md index bdfcfdd4..c0288a1d 100644 --- a/crates/tek_mixer/README.md +++ b/crates/tek_mixer/README.md @@ -1,6 +1,15 @@ -# `tek_mixer` and `tek_track` +# `tek_mixer` // TODO: // - Meters: propagate clipping: // - If one stage clips, all stages after it are marked red // - If one track clips, all tracks that feed from it are marked red? + +# `tek_track` + +# `tek_sampler` + +This crate implements a sampler device which plays audio files +in response to MIDI notes. + +# `tek_plugin` diff --git a/crates/tek_mixer/src/lib.rs b/crates/tek_mixer/src/lib.rs index 1601fe8b..ad85d6b6 100644 --- a/crates/tek_mixer/src/lib.rs +++ b/crates/tek_mixer/src/lib.rs @@ -1,7 +1,15 @@ 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 std::collections::BTreeMap; +pub(crate) use std::sync::{Arc, Mutex, RwLock}; +pub(crate) use std::path::PathBuf; +pub(crate) use std::ffi::OsString; +pub(crate) use std::fs::read_dir; + submod! { mixer mixer_cli @@ -10,4 +18,14 @@ submod! { track track_view track_handle + plugin + plugin_lv2 + plugin_lv2_gui + plugin_vst2 + plugin_vst3 + sample + sample_add + sampler + sampler_edn + voice } diff --git a/crates/tek_plugin/src/plugin.rs b/crates/tek_mixer/src/plugin.rs similarity index 100% rename from crates/tek_plugin/src/plugin.rs rename to crates/tek_mixer/src/plugin.rs diff --git a/crates/tek_plugin/src/lv2.rs b/crates/tek_mixer/src/plugin_lv2.rs similarity index 100% rename from crates/tek_plugin/src/lv2.rs rename to crates/tek_mixer/src/plugin_lv2.rs diff --git a/crates/tek_plugin/src/lv2_gui.rs b/crates/tek_mixer/src/plugin_lv2_gui.rs similarity index 100% rename from crates/tek_plugin/src/lv2_gui.rs rename to crates/tek_mixer/src/plugin_lv2_gui.rs diff --git a/crates/tek_plugin/src/main.rs b/crates/tek_mixer/src/plugin_main.rs similarity index 100% rename from crates/tek_plugin/src/main.rs rename to crates/tek_mixer/src/plugin_main.rs diff --git a/crates/tek_plugin/src/vst2.rs b/crates/tek_mixer/src/plugin_vst2.rs similarity index 100% rename from crates/tek_plugin/src/vst2.rs rename to crates/tek_mixer/src/plugin_vst2.rs diff --git a/crates/tek_mixer/src/plugin_vst3.rs b/crates/tek_mixer/src/plugin_vst3.rs new file mode 100644 index 00000000..46330df3 --- /dev/null +++ b/crates/tek_mixer/src/plugin_vst3.rs @@ -0,0 +1 @@ +//! TODO diff --git a/crates/tek_sampler/src/sample.rs b/crates/tek_mixer/src/sample.rs similarity index 100% rename from crates/tek_sampler/src/sample.rs rename to crates/tek_mixer/src/sample.rs diff --git a/crates/tek_sampler/src/sample_add.rs b/crates/tek_mixer/src/sample_add.rs similarity index 100% rename from crates/tek_sampler/src/sample_add.rs rename to crates/tek_mixer/src/sample_add.rs diff --git a/crates/tek_sampler/src/sampler.rs b/crates/tek_mixer/src/sampler.rs similarity index 100% rename from crates/tek_sampler/src/sampler.rs rename to crates/tek_mixer/src/sampler.rs diff --git a/crates/tek_sampler/src/sampler_edn.rs b/crates/tek_mixer/src/sampler_edn.rs similarity index 100% rename from crates/tek_sampler/src/sampler_edn.rs rename to crates/tek_mixer/src/sampler_edn.rs diff --git a/crates/tek_sampler/src/main.rs b/crates/tek_mixer/src/sampler_main.rs similarity index 100% rename from crates/tek_sampler/src/main.rs rename to crates/tek_mixer/src/sampler_main.rs diff --git a/crates/tek_sampler/src/voice.rs b/crates/tek_mixer/src/voice.rs similarity index 100% rename from crates/tek_sampler/src/voice.rs rename to crates/tek_mixer/src/voice.rs diff --git a/crates/tek_plugin/Cargo.toml b/crates/tek_plugin/Cargo.toml deleted file mode 100644 index 09cdb9b6..00000000 --- a/crates/tek_plugin/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "tek_plugin" -edition = "2021" -version = "0.1.0" - -[dependencies] -tek_core = { path = "../tek_core" } -tek_jack = { path = "../tek_jack" } -livi = "0.7.4" -winit = { version = "0.30.4", features = [ "x11" ] } -suil-rs = { path = "../suil" } -vst = "0.4.0" -#vst3 = "0.1.0" - -[lib] -path = "src/lib.rs" - -[[bin]] -name = "tek_plugin" -path = "src/main.rs" diff --git a/crates/tek_plugin/README.md b/crates/tek_plugin/README.md deleted file mode 100644 index 6efe9aaf..00000000 --- a/crates/tek_plugin/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# `tek_plugin` - -This crate allows plugins to be loaded. - diff --git a/crates/tek_plugin/src/lib.rs b/crates/tek_plugin/src/lib.rs deleted file mode 100644 index 0d82e719..00000000 --- a/crates/tek_plugin/src/lib.rs +++ /dev/null @@ -1,16 +0,0 @@ -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_jack::*; -pub(crate) use tek_jack::jack::*; - -use std::sync::Arc; -use std::sync::Mutex; - -submod! { - plugin - lv2 - lv2_gui - vst2 - vst3 -} diff --git a/crates/tek_plugin/src/vst3.rs b/crates/tek_plugin/src/vst3.rs deleted file mode 100644 index c7b7e813..00000000 --- a/crates/tek_plugin/src/vst3.rs +++ /dev/null @@ -1 +0,0 @@ -use crate::*; diff --git a/crates/tek_sampler/Cargo.toml b/crates/tek_sampler/Cargo.toml deleted file mode 100644 index 4a138126..00000000 --- a/crates/tek_sampler/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "tek_sampler" -edition = "2021" -version = "0.1.0" - -[dependencies] -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/README.md b/crates/tek_sampler/README.md deleted file mode 100644 index 67421b6e..00000000 --- a/crates/tek_sampler/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# `tek_sampler` - -This crate implements a sampler device which plays audio files -in response to MIDI notes. diff --git a/crates/tek_sampler/src/lib.rs b/crates/tek_sampler/src/lib.rs deleted file mode 100644 index 39fa852b..00000000 --- a/crates/tek_sampler/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Sampler (currently 16bit WAVs at system rate; TODO convert/resample) - -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 std::collections::BTreeMap; -pub(crate) use std::sync::{Arc, Mutex, RwLock}; -pub(crate) use std::path::PathBuf; -pub(crate) use std::ffi::OsString; -pub(crate) use std::fs::read_dir; - -submod! { - sampler - sample - sample_add - voice -} diff --git a/crates/tek_sequencer/Cargo.toml b/crates/tek_sequencer/Cargo.toml index e1ac9479..44867b60 100644 --- a/crates/tek_sequencer/Cargo.toml +++ b/crates/tek_sequencer/Cargo.toml @@ -6,7 +6,6 @@ version = "0.1.0" [dependencies] tek_core = { path = "../tek_core" } tek_jack = { path = "../tek_jack" } -tek_timer = { path = "../tek_timer" } [lib] path = "src/lib.rs" @@ -18,3 +17,7 @@ path = "src/sequencer_main.rs" [[bin]] name = "tek_arranger" path = "src/arranger_main.rs" + +[[bin]] +name = "tek_transport" +path = "src/transport_main.rs" diff --git a/crates/tek_sequencer/README.md b/crates/tek_sequencer/README.md index e9ec475e..80c49196 100644 --- a/crates/tek_sequencer/README.md +++ b/crates/tek_sequencer/README.md @@ -1,3 +1,23 @@ # `tek_sequencer` This crate implements a MIDI sequencer and arranger with clip launching. + +--- + +# `tek_arranger` + +--- + +# `tek_timer` + +This crate implements time sync and JACK transport control. + +* Warning: If transport is set rolling by qjackctl, this program can't pause it +* Todo: bpm: shift +/- 0.001 +* Todo: quant/sync: shift = next/prev value of same type (normal, triplet, dotted) + * Or: use shift to switch between inc/dec top/bottom value? +* Todo: focus play button +* Todo: focus time position +* Todo: edit numeric values +* Todo: jump to time/bbt markers +* Todo: count xruns diff --git a/crates/tek_sequencer/src/arranger.rs b/crates/tek_sequencer/src/arranger.rs index 05186875..6784a65a 100644 --- a/crates/tek_sequencer/src/arranger.rs +++ b/crates/tek_sequencer/src/arranger.rs @@ -49,6 +49,16 @@ impl Arranger { _ => {} } } + pub fn sequencer (&self) -> Option<&Sequencer> { + self.selected.track() + .map(|track|self.tracks.get(track)) + .flatten() + } + pub fn sequencer_mut (&mut self) -> Option<&mut Sequencer> { + self.selected.track() + .map(|track|self.tracks.get_mut(track)) + .flatten() + } pub fn show_phrase (&mut self) -> Usually<()> { unimplemented!() //let phrase = self.phrase(); diff --git a/crates/tek_sequencer/src/arranger_cli.rs b/crates/tek_sequencer/src/arranger_cli.rs index 5989f7e4..5d92de59 100644 --- a/crates/tek_sequencer/src/arranger_cli.rs +++ b/crates/tek_sequencer/src/arranger_cli.rs @@ -1,5 +1,4 @@ use tek_core::clap::{self, Parser}; -use tek_timer::TransportToolbar; use crate::*; #[derive(Debug, Parser)] diff --git a/crates/tek_sequencer/src/lib.rs b/crates/tek_sequencer/src/lib.rs index f8ab8162..aaad6bca 100644 --- a/crates/tek_sequencer/src/lib.rs +++ b/crates/tek_sequencer/src/lib.rs @@ -4,24 +4,27 @@ 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_timer::*; +pub(crate) use tek_jack::{*, jack::*}; pub(crate) use std::sync::{Arc, RwLock}; submod! { - midi - phrase - sequencer - sequencer_cli - sequencer_handle - sequencer_render arranger arranger_cli arranger_focus arranger_handle arranger_track arranger_view + midi + phrase scene + sequencer + sequencer_cli + sequencer_handle + sequencer_render + transport + transport_focus + transport_handle + transport_render } pubmod! { diff --git a/crates/tek_sequencer/src/sequencer_cli.rs b/crates/tek_sequencer/src/sequencer_cli.rs index fe256521..fc597206 100644 --- a/crates/tek_sequencer/src/sequencer_cli.rs +++ b/crates/tek_sequencer/src/sequencer_cli.rs @@ -1,5 +1,4 @@ use tek_core::clap::{self, Parser}; -use tek_timer::TransportToolbar; use crate::*; #[derive(Debug, Parser)] diff --git a/crates/tek_timer/src/transport.rs b/crates/tek_sequencer/src/transport.rs similarity index 100% rename from crates/tek_timer/src/transport.rs rename to crates/tek_sequencer/src/transport.rs diff --git a/crates/tek_timer/src/transport_focus.rs b/crates/tek_sequencer/src/transport_focus.rs similarity index 100% rename from crates/tek_timer/src/transport_focus.rs rename to crates/tek_sequencer/src/transport_focus.rs diff --git a/crates/tek_timer/src/transport_handle.rs b/crates/tek_sequencer/src/transport_handle.rs similarity index 100% rename from crates/tek_timer/src/transport_handle.rs rename to crates/tek_sequencer/src/transport_handle.rs diff --git a/crates/tek_timer/src/transport_main.rs b/crates/tek_sequencer/src/transport_main.rs similarity index 100% rename from crates/tek_timer/src/transport_main.rs rename to crates/tek_sequencer/src/transport_main.rs diff --git a/crates/tek_timer/src/transport_render.rs b/crates/tek_sequencer/src/transport_render.rs similarity index 100% rename from crates/tek_timer/src/transport_render.rs rename to crates/tek_sequencer/src/transport_render.rs diff --git a/crates/tek_timer/Cargo.toml b/crates/tek_timer/Cargo.toml deleted file mode 100644 index 25752403..00000000 --- a/crates/tek_timer/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tek_timer" -edition = "2021" -version = "0.1.0" - -[dependencies] -tek_core = { path = "../tek_core" } -tek_jack = { path = "../tek_jack" } -atomic_float = "1.0.0" - -[lib] -path = "src/lib.rs" - -[[bin]] -name = "tek_timer" -path = "src/transport_main.rs" diff --git a/crates/tek_timer/README.md b/crates/tek_timer/README.md deleted file mode 100644 index d6dd2301..00000000 --- a/crates/tek_timer/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# `tek_timer` - -This crate implements time sync and JACK transport control. - -* Warning: If transport is set rolling by qjackctl, this program can't pause it -* Todo: bpm: shift +/- 0.001 -* Todo: quant/sync: shift = next/prev value of same type (normal, triplet, dotted) - * Or: use shift to switch between inc/dec top/bottom value? -* Todo: focus play button -* Todo: focus time position -* Todo: edit numeric values -* Todo: jump to time/bbt markers -* Todo: count xruns