From 6411a82279724fc5bdc2408d3f470994a2493d25 Mon Sep 17 00:00:00 2001 From: stop screaming Date: Fri, 20 Feb 2026 14:25:35 +0200 Subject: [PATCH 1/4] fix: checks, tests --- deps/tengri | 2 +- device/arranger.rs | 2 +- device/clock.rs | 2 +- device/sampler.rs | 2 +- device/sequencer.rs | 12 +++++------- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/deps/tengri b/deps/tengri index ce2eeaee..2a7e981b 160000 --- a/deps/tengri +++ b/deps/tengri @@ -1 +1 @@ -Subproject commit ce2eeaee7fc23c3f3683cee310a9117d764409cb +Subproject commit 2a7e981b9c4294cc23cf0dbf5c8625aff9486c78 diff --git a/device/arranger.rs b/device/arranger.rs index 5b64f3b8..be67eb03 100644 --- a/device/arranger.rs +++ b/device/arranger.rs @@ -370,7 +370,7 @@ impl Arrangement { } } -pub(crate) fn wrap (bg: Color, fg: Color, content: impl Content) -> impl Content { +pub fn wrap (bg: Color, fg: Color, content: impl Content) -> impl Content { let left = Tui::fg_bg(bg, Reset, Fixed::X(1, Repeat::Y("▐"))); let right = Tui::fg_bg(bg, Reset, Fixed::X(1, Repeat::Y("▌"))); Bsp::e(left, Bsp::w(right, Tui::fg_bg(fg, bg, content))) diff --git a/device/clock.rs b/device/clock.rs index 17ab9d36..e8a42a5a 100644 --- a/device/clock.rs +++ b/device/clock.rs @@ -292,7 +292,7 @@ pub fn view_status ( ))) } -pub(crate) fn button_play_pause (playing: bool) -> impl Content { +pub fn button_play_pause (playing: bool) -> impl Content { let compact = true;//self.is_editing(); Tui::bg(if playing { Rgb(0, 128, 0) } else { Rgb(128, 64, 0) }, Either::new(compact, diff --git a/device/sampler.rs b/device/sampler.rs index c4905944..353b2b5c 100644 --- a/device/sampler.rs +++ b/device/sampler.rs @@ -1,5 +1,5 @@ //! ``` -//! let sample = Sample::new("test", 0, 0, vec![]); +//! let sample = tek_device::Sample::new("test", 0, 0, vec![]); //! ``` use crate::*; diff --git a/device/sequencer.rs b/device/sequencer.rs index c12a263f..f7b2145e 100644 --- a/device/sequencer.rs +++ b/device/sequencer.rs @@ -1,24 +1,22 @@ //! MIDI sequencer //! ``` -//! use crate::*; -//! -//! let clip = MidiClip::default(); +//! let clip = tek_device::MidiClip::default(); //! println!("Empty clip: {clip:?}"); //! -//! let clip = MidiClip::stop_all(); +//! let clip = tek_device::MidiClip::stop_all(); //! println!("Panic clip: {clip:?}"); //! -//! let mut clip = MidiClip::new("clip", true, 1, None, None); +//! let mut clip = tek_device::MidiClip::new("clip", true, 1, None, None); //! clip.set_length(96); //! clip.toggle_loop(); -//! clip.record_event(12, MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }); +//! clip.record_event(12, midly::MidiMessage::NoteOn { key: 36.into(), vel: 100.into() }); //! assert!(clip.contains_note_on(36.into(), 6, 18)); //! assert_eq!(&clip.notes, &clip.duplicate().notes); //! //! let clip = std::sync::Arc::new(clip); //! assert_eq!(clip.clone(), clip); //! -//! let sequencer = Sequencer::default(); +//! let sequencer = tek_device::Sequencer::default(); //! println!("{sequencer:?}"); //! ``` From 9b4f7f25c12f8a8ac518c0248d12c325bf6aec17 Mon Sep 17 00:00:00 2001 From: stop screaming Date: Fri, 20 Feb 2026 14:50:19 +0200 Subject: [PATCH 2/4] refactor: decided i don't like the deps/ subdir any longer --- .gitmodules | 8 ++++---- deps/tengri | 1 - deps/dizzle => dizzle | 0 deps/rust-jack => rust-jack | 0 {deps/suil => suil}/Cargo.toml | 0 {deps/suil => suil}/build.rs | 0 {deps/suil => suil}/src/bound.rs | 0 {deps/suil => suil}/src/gtk.rs | 0 {deps/suil => suil}/src/lib.rs | 0 {deps/suil => suil}/src/test.rs | 0 {deps/suil => suil}/stdbool.h | 0 {deps/suil => suil}/stdint.h | 0 {deps/suil => suil}/wrapper.h | 0 tengri | 1 + {deps/vst => vst}/.github/workflows/deploy.yml | 0 {deps/vst => vst}/.github/workflows/docs.yml | 0 {deps/vst => vst}/.github/workflows/rust.yml | 0 {deps/vst => vst}/.gitignore | 0 {deps/vst => vst}/CHANGELOG.md | 0 {deps/vst => vst}/Cargo.toml | 0 {deps/vst => vst}/LICENSE | 0 {deps/vst => vst}/README.md | 0 {deps/vst => vst}/examples/dimension_expander.rs | 0 {deps/vst => vst}/examples/fwd_midi.rs | 0 {deps/vst => vst}/examples/gain_effect.rs | 0 {deps/vst => vst}/examples/ladder_filter.rs | 0 {deps/vst => vst}/examples/simple_host.rs | 0 {deps/vst => vst}/examples/sine_synth.rs | 0 {deps/vst => vst}/examples/transfer_and_smooth.rs | 0 {deps/vst => vst}/osx_vst_bundler.sh | 0 {deps/vst => vst}/rustfmt.toml | 0 {deps/vst => vst}/src/api.rs | 0 {deps/vst => vst}/src/buffer.rs | 0 {deps/vst => vst}/src/cache.rs | 0 {deps/vst => vst}/src/channels.rs | 0 {deps/vst => vst}/src/editor.rs | 0 {deps/vst => vst}/src/event.rs | 0 {deps/vst => vst}/src/host.rs | 0 {deps/vst => vst}/src/interfaces.rs | 0 {deps/vst => vst}/src/lib.rs | 0 {deps/vst => vst}/src/plugin.rs | 0 {deps/vst => vst}/src/prelude.rs | 0 {deps/vst => vst}/src/util/atomic_float.rs | 0 {deps/vst => vst}/src/util/mod.rs | 0 {deps/vst => vst}/src/util/parameter_transfer.rs | 0 45 files changed, 5 insertions(+), 5 deletions(-) delete mode 160000 deps/tengri rename deps/dizzle => dizzle (100%) rename deps/rust-jack => rust-jack (100%) rename {deps/suil => suil}/Cargo.toml (100%) rename {deps/suil => suil}/build.rs (100%) rename {deps/suil => suil}/src/bound.rs (100%) rename {deps/suil => suil}/src/gtk.rs (100%) rename {deps/suil => suil}/src/lib.rs (100%) rename {deps/suil => suil}/src/test.rs (100%) rename {deps/suil => suil}/stdbool.h (100%) rename {deps/suil => suil}/stdint.h (100%) rename {deps/suil => suil}/wrapper.h (100%) create mode 160000 tengri rename {deps/vst => vst}/.github/workflows/deploy.yml (100%) rename {deps/vst => vst}/.github/workflows/docs.yml (100%) rename {deps/vst => vst}/.github/workflows/rust.yml (100%) rename {deps/vst => vst}/.gitignore (100%) rename {deps/vst => vst}/CHANGELOG.md (100%) rename {deps/vst => vst}/Cargo.toml (100%) rename {deps/vst => vst}/LICENSE (100%) rename {deps/vst => vst}/README.md (100%) rename {deps/vst => vst}/examples/dimension_expander.rs (100%) rename {deps/vst => vst}/examples/fwd_midi.rs (100%) rename {deps/vst => vst}/examples/gain_effect.rs (100%) rename {deps/vst => vst}/examples/ladder_filter.rs (100%) rename {deps/vst => vst}/examples/simple_host.rs (100%) rename {deps/vst => vst}/examples/sine_synth.rs (100%) rename {deps/vst => vst}/examples/transfer_and_smooth.rs (100%) rename {deps/vst => vst}/osx_vst_bundler.sh (100%) rename {deps/vst => vst}/rustfmt.toml (100%) rename {deps/vst => vst}/src/api.rs (100%) rename {deps/vst => vst}/src/buffer.rs (100%) rename {deps/vst => vst}/src/cache.rs (100%) rename {deps/vst => vst}/src/channels.rs (100%) rename {deps/vst => vst}/src/editor.rs (100%) rename {deps/vst => vst}/src/event.rs (100%) rename {deps/vst => vst}/src/host.rs (100%) rename {deps/vst => vst}/src/interfaces.rs (100%) rename {deps/vst => vst}/src/lib.rs (100%) rename {deps/vst => vst}/src/plugin.rs (100%) rename {deps/vst => vst}/src/prelude.rs (100%) rename {deps/vst => vst}/src/util/atomic_float.rs (100%) rename {deps/vst => vst}/src/util/mod.rs (100%) rename {deps/vst => vst}/src/util/parameter_transfer.rs (100%) diff --git a/.gitmodules b/.gitmodules index 04c3bcce..50fe8c6d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,11 +3,11 @@ url = https://codeberg.org/unspeaker/rust-jack branch = timebase [submodule "tengri"] - path = deps/tengri - url = ../tengri/ + path = tengri + url = https://codeberg.org/unspeaker/tengri [submodule "deps/rust-jack"] - path = deps/rust-jack + path = rust-jack url = https://codeberg.org/unspeaker/rust-jack [submodule "deps/dizzle"] - path = deps/dizzle + path = dizzle url = ssh://git@codeberg.org/unspeaker/dizzle.git diff --git a/deps/tengri b/deps/tengri deleted file mode 160000 index 2a7e981b..00000000 --- a/deps/tengri +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2a7e981b9c4294cc23cf0dbf5c8625aff9486c78 diff --git a/deps/dizzle b/dizzle similarity index 100% rename from deps/dizzle rename to dizzle diff --git a/deps/rust-jack b/rust-jack similarity index 100% rename from deps/rust-jack rename to rust-jack diff --git a/deps/suil/Cargo.toml b/suil/Cargo.toml similarity index 100% rename from deps/suil/Cargo.toml rename to suil/Cargo.toml diff --git a/deps/suil/build.rs b/suil/build.rs similarity index 100% rename from deps/suil/build.rs rename to suil/build.rs diff --git a/deps/suil/src/bound.rs b/suil/src/bound.rs similarity index 100% rename from deps/suil/src/bound.rs rename to suil/src/bound.rs diff --git a/deps/suil/src/gtk.rs b/suil/src/gtk.rs similarity index 100% rename from deps/suil/src/gtk.rs rename to suil/src/gtk.rs diff --git a/deps/suil/src/lib.rs b/suil/src/lib.rs similarity index 100% rename from deps/suil/src/lib.rs rename to suil/src/lib.rs diff --git a/deps/suil/src/test.rs b/suil/src/test.rs similarity index 100% rename from deps/suil/src/test.rs rename to suil/src/test.rs diff --git a/deps/suil/stdbool.h b/suil/stdbool.h similarity index 100% rename from deps/suil/stdbool.h rename to suil/stdbool.h diff --git a/deps/suil/stdint.h b/suil/stdint.h similarity index 100% rename from deps/suil/stdint.h rename to suil/stdint.h diff --git a/deps/suil/wrapper.h b/suil/wrapper.h similarity index 100% rename from deps/suil/wrapper.h rename to suil/wrapper.h diff --git a/tengri b/tengri new file mode 160000 index 00000000..04db6f4a --- /dev/null +++ b/tengri @@ -0,0 +1 @@ +Subproject commit 04db6f4af549012a4ffab3f06af3d2d6694cf811 diff --git a/deps/vst/.github/workflows/deploy.yml b/vst/.github/workflows/deploy.yml similarity index 100% rename from deps/vst/.github/workflows/deploy.yml rename to vst/.github/workflows/deploy.yml diff --git a/deps/vst/.github/workflows/docs.yml b/vst/.github/workflows/docs.yml similarity index 100% rename from deps/vst/.github/workflows/docs.yml rename to vst/.github/workflows/docs.yml diff --git a/deps/vst/.github/workflows/rust.yml b/vst/.github/workflows/rust.yml similarity index 100% rename from deps/vst/.github/workflows/rust.yml rename to vst/.github/workflows/rust.yml diff --git a/deps/vst/.gitignore b/vst/.gitignore similarity index 100% rename from deps/vst/.gitignore rename to vst/.gitignore diff --git a/deps/vst/CHANGELOG.md b/vst/CHANGELOG.md similarity index 100% rename from deps/vst/CHANGELOG.md rename to vst/CHANGELOG.md diff --git a/deps/vst/Cargo.toml b/vst/Cargo.toml similarity index 100% rename from deps/vst/Cargo.toml rename to vst/Cargo.toml diff --git a/deps/vst/LICENSE b/vst/LICENSE similarity index 100% rename from deps/vst/LICENSE rename to vst/LICENSE diff --git a/deps/vst/README.md b/vst/README.md similarity index 100% rename from deps/vst/README.md rename to vst/README.md diff --git a/deps/vst/examples/dimension_expander.rs b/vst/examples/dimension_expander.rs similarity index 100% rename from deps/vst/examples/dimension_expander.rs rename to vst/examples/dimension_expander.rs diff --git a/deps/vst/examples/fwd_midi.rs b/vst/examples/fwd_midi.rs similarity index 100% rename from deps/vst/examples/fwd_midi.rs rename to vst/examples/fwd_midi.rs diff --git a/deps/vst/examples/gain_effect.rs b/vst/examples/gain_effect.rs similarity index 100% rename from deps/vst/examples/gain_effect.rs rename to vst/examples/gain_effect.rs diff --git a/deps/vst/examples/ladder_filter.rs b/vst/examples/ladder_filter.rs similarity index 100% rename from deps/vst/examples/ladder_filter.rs rename to vst/examples/ladder_filter.rs diff --git a/deps/vst/examples/simple_host.rs b/vst/examples/simple_host.rs similarity index 100% rename from deps/vst/examples/simple_host.rs rename to vst/examples/simple_host.rs diff --git a/deps/vst/examples/sine_synth.rs b/vst/examples/sine_synth.rs similarity index 100% rename from deps/vst/examples/sine_synth.rs rename to vst/examples/sine_synth.rs diff --git a/deps/vst/examples/transfer_and_smooth.rs b/vst/examples/transfer_and_smooth.rs similarity index 100% rename from deps/vst/examples/transfer_and_smooth.rs rename to vst/examples/transfer_and_smooth.rs diff --git a/deps/vst/osx_vst_bundler.sh b/vst/osx_vst_bundler.sh similarity index 100% rename from deps/vst/osx_vst_bundler.sh rename to vst/osx_vst_bundler.sh diff --git a/deps/vst/rustfmt.toml b/vst/rustfmt.toml similarity index 100% rename from deps/vst/rustfmt.toml rename to vst/rustfmt.toml diff --git a/deps/vst/src/api.rs b/vst/src/api.rs similarity index 100% rename from deps/vst/src/api.rs rename to vst/src/api.rs diff --git a/deps/vst/src/buffer.rs b/vst/src/buffer.rs similarity index 100% rename from deps/vst/src/buffer.rs rename to vst/src/buffer.rs diff --git a/deps/vst/src/cache.rs b/vst/src/cache.rs similarity index 100% rename from deps/vst/src/cache.rs rename to vst/src/cache.rs diff --git a/deps/vst/src/channels.rs b/vst/src/channels.rs similarity index 100% rename from deps/vst/src/channels.rs rename to vst/src/channels.rs diff --git a/deps/vst/src/editor.rs b/vst/src/editor.rs similarity index 100% rename from deps/vst/src/editor.rs rename to vst/src/editor.rs diff --git a/deps/vst/src/event.rs b/vst/src/event.rs similarity index 100% rename from deps/vst/src/event.rs rename to vst/src/event.rs diff --git a/deps/vst/src/host.rs b/vst/src/host.rs similarity index 100% rename from deps/vst/src/host.rs rename to vst/src/host.rs diff --git a/deps/vst/src/interfaces.rs b/vst/src/interfaces.rs similarity index 100% rename from deps/vst/src/interfaces.rs rename to vst/src/interfaces.rs diff --git a/deps/vst/src/lib.rs b/vst/src/lib.rs similarity index 100% rename from deps/vst/src/lib.rs rename to vst/src/lib.rs diff --git a/deps/vst/src/plugin.rs b/vst/src/plugin.rs similarity index 100% rename from deps/vst/src/plugin.rs rename to vst/src/plugin.rs diff --git a/deps/vst/src/prelude.rs b/vst/src/prelude.rs similarity index 100% rename from deps/vst/src/prelude.rs rename to vst/src/prelude.rs diff --git a/deps/vst/src/util/atomic_float.rs b/vst/src/util/atomic_float.rs similarity index 100% rename from deps/vst/src/util/atomic_float.rs rename to vst/src/util/atomic_float.rs diff --git a/deps/vst/src/util/mod.rs b/vst/src/util/mod.rs similarity index 100% rename from deps/vst/src/util/mod.rs rename to vst/src/util/mod.rs diff --git a/deps/vst/src/util/parameter_transfer.rs b/vst/src/util/parameter_transfer.rs similarity index 100% rename from deps/vst/src/util/parameter_transfer.rs rename to vst/src/util/parameter_transfer.rs From 49a5451af29d8e1f513ddd9f43dca9044f2fdc4c Mon Sep 17 00:00:00 2001 From: stop screaming Date: Fri, 20 Feb 2026 14:50:42 +0200 Subject: [PATCH 3/4] refactor(app) what is UP with that init --- app/tek.rs | 72 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/app/tek.rs b/app/tek.rs index 11cb8652..cdb057e9 100644 --- a/app/tek.rs +++ b/app/tek.rs @@ -908,50 +908,66 @@ pub mod glue { midi_from, midi_from_re, midi_to, midi_to_re, left_from, right_from, left_to, right_to, .. } = &self.action { - let name = name.as_ref().map_or("tek", |x|x.as_str()); - let jack = Jack::new(&name)?; + + // Connect to JACK + let name = name.as_ref().map_or("tek", |x|x.as_str()); + let jack = Jack::new(&name)?; + + // Collect MIDI IO: + let midi_ins = Connect::collect(&midi_from, &[] as &[&str], &midi_from_re).iter().enumerate() + .map(|(index, connect)|jack.midi_in(&format!("M/{index}"), &[connect.clone()])) + .collect::, _>>()?; + let midi_outs = Connect::collect(&midi_to, &[] as &[&str], &midi_to_re).iter().enumerate() + .map(|(index, connect)|jack.midi_out(&format!("{index}/M"), &[connect.clone()])) + .collect::, _>>()?; + + // TODO: Collect audio IO: let empty = &[] as &[&str]; let left_froms = Connect::collect(&left_from, empty, empty); let left_tos = Connect::collect(&left_to, empty, empty); let right_froms = Connect::collect(&right_from, empty, empty); let right_tos = Connect::collect(&right_to, empty, empty); let _audio_froms = &[left_froms.as_slice(), right_froms.as_slice()]; - let _audio_tos = &[left_tos.as_slice(), right_tos.as_slice()]; - let mut midi_ins = vec![]; - let mut midi_outs = vec![]; - for (index, connect) in Connect::collect(&midi_from, &[] as &[&str], &midi_from_re).iter().enumerate() { - midi_ins.push(jack.midi_in(&format!("M/{index}"), &[connect.clone()])?); - } - for (index, connect) in Connect::collect(&midi_to, &[] as &[&str], &midi_to_re).iter().enumerate() { - midi_outs.push(jack.midi_out(&format!("{index}/M"), &[connect.clone()])?); - }; - let clock = Clock::new( - &jack, *bpm - )?; - let mut project = Arrangement::new( - &jack, None, clock, vec![], vec![], midi_ins, midi_outs - ); + let _audio_tos = &[left_tos.as_slice(), right_tos.as_slice()]; + + // Create initial project: + let clock = Clock::new(&jack, *bpm)?; + let mut project = Arrangement::new(&jack, None, clock, vec![], vec![], + midi_ins, midi_outs); project.tracks_add(tracks.unwrap_or(0), None, &[], &[])?; project.scenes_add(scenes.unwrap_or(0))?; + if matches!(self.action, Action::Status) { + + // Show status and exit self.show_status(&project); + } else { + + // Initialize the app state let app = App::new(&jack, project, config, ":menu"); - let client = jack.run(move|jack|{ - jack.sync_lead(*sync_lead, |mut state|{ - let clock = app.clock(); - clock.playhead.update_from_sample(state.position.frame() as f64); - state.position.bbt = Some(clock.bbt()); - state.position - })?; - jack.sync_follow(*sync_follow)?; - Ok(app) - })?; + if matches!(self.action, Action::Headless) { + + // TODO: Headless mode (daemon + client over IPC, then over network...) println!("todo headless"); + } else { - Tui::run(&client)?; + + // Run the [Tui] and [Jack] threads with the [App] state. + Tui::run(true, jack.run(move|jack|{ + jack.sync_lead(*sync_lead, |mut state|{ + let clock = app.clock(); + clock.playhead.update_from_sample(state.position.frame() as f64); + state.position.bbt = Some(clock.bbt()); + state.position + })?; + jack.sync_follow(*sync_follow)?; + Ok(app) + })?)?; + } + } } Ok(()) From 7b8a48ad094d162813ec69918e4569aad125b0f3 Mon Sep 17 00:00:00 2001 From: stop screaming Date: Fri, 20 Feb 2026 16:37:44 +0200 Subject: [PATCH 4/4] shell: add cloc --- Cargo.toml | 8 ++++---- shell.nix | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 84c082bf..81945851 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace] resolver = "2" members = [ "./app", "./engine", "./device" ] -exclude = [ "./deps/tengri", "./deps/dizzle" ] +exclude = [ "./tengri", "./dizzle" ] [workspace.package] edition = "2024" @@ -15,14 +15,14 @@ inherits = "test" lto = false [workspace.dependencies.tengri] -path = "./deps/tengri/tengri" +path = "./tengri/tengri" features = [ "tui", "dsl" ] [workspace.dependencies.tengri_proc] -path = "./deps/tengri/proc" +path = "./tengri/proc" [workspace.dependencies.jack] -path = "./deps/rust-jack" +path = "./rust-jack" [workspace.dependencies] tek = { path = "./tek" } diff --git a/shell.nix b/shell.nix index 5f36b882..f40138ad 100755 --- a/shell.nix +++ b/shell.nix @@ -8,6 +8,7 @@ pkgs.freetype pkgs.libclang pkgs.mold + pkgs.cloc ]; buildInputs = [ pkgs.jack2