wip(p67,e0): whew!

This commit is contained in:
🪞👃🪞 2024-11-21 16:55:05 +01:00
parent faf7576ad8
commit 132093f14a
8 changed files with 64 additions and 59 deletions

View file

@ -8,21 +8,21 @@ tek_core = { path = "../tek_core" }
tek_api = { path = "../tek_api" } tek_api = { path = "../tek_api" }
tek_tui = { path = "../tek_tui" } tek_tui = { path = "../tek_tui" }
[[bin]] #[[bin]]
name = "tek_mixer" #name = "tek_mixer"
path = "src/cli_mixer.rs" #path = "src/cli_mixer.rs"
[[bin]] #[[bin]]
name = "tek_track" #name = "tek_track"
path = "src/cli_track.rs" #path = "src/cli_track.rs"
[[bin]] #[[bin]]
name = "tek_sampler" #name = "tek_sampler"
path = "src/cli_sampler.rs" #path = "src/cli_sampler.rs"
[[bin]] #[[bin]]
name = "tek_plugin" #name = "tek_plugin"
path = "src/cli_plugin.rs" #path = "src/cli_plugin.rs"
[[bin]] [[bin]]
name = "tek_sequencer" name = "tek_sequencer"

View file

@ -1,4 +1,5 @@
use tek_core::clap::{self, Parser}; use tek_api::{JackActivate, ArrangerTracksApi, HasScenes};
use tek_core::{*, clap::{self, Parser}};
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
ArrangerCli::parse().run() ArrangerCli::parse().run()
@ -22,14 +23,14 @@ impl ArrangerCli {
/// Run the arranger TUI from CLI arguments. /// Run the arranger TUI from CLI arguments.
fn run (&self) -> Usually<()> { fn run (&self) -> Usually<()> {
Tui::run(JackClient::new("tek_arranger")?.activate_with(|jack|{ Tui::run(JackClient::new("tek_arranger")?.activate_with(|jack|{
let mut app = TransportApp::try_from(jack)?; let mut app = tek_tui::ArrangerTui::try_from(jack)?;
if let Some(name) = self.name.as_ref() { if let Some(name) = self.name.as_ref() {
*arrangement.name.write().unwrap() = name.clone(); *app.name.write().unwrap() = name.clone();
} }
let track_color_1 = ItemColor::random(); let track_color_1 = ItemColor::random();
let track_color_2 = ItemColor::random(); let track_color_2 = ItemColor::random();
for i in 0..self.tracks { for i in 0..self.tracks {
let _track = arrangement.track_add( let _track = app.track_add(
None, None,
Some(track_color_1.mix(track_color_2, i as f32 / self.tracks as f32)) Some(track_color_1.mix(track_color_2, i as f32 / self.tracks as f32))
)?; )?;
@ -37,13 +38,13 @@ impl ArrangerCli {
let scene_color_1 = ItemColor::random(); let scene_color_1 = ItemColor::random();
let scene_color_2 = ItemColor::random(); let scene_color_2 = ItemColor::random();
for i in 0..self.scenes { for i in 0..self.scenes {
let _scene = arrangement.scene_add( let _scene = app.scene_add(
None, None,
Some(scene_color_1.mix(scene_color_2, i as f32 / self.scenes as f32)) Some(scene_color_1.mix(scene_color_2, i as f32 / self.scenes as f32))
)?; )?;
} }
Ok(app) Ok(app)
})?)? })?)?;
Ok(()) Ok(())
} }
} }

View file

@ -1,4 +1,5 @@
use tek_core::clap::{self, Parser}; use tek_api::JackActivate;
use tek_core::{*, clap::{self, Parser}};
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
SequencerCli::parse().run() SequencerCli::parse().run()
@ -20,7 +21,7 @@ pub struct SequencerCli {
impl SequencerCli { impl SequencerCli {
fn run (&self) -> Usually<()> { fn run (&self) -> Usually<()> {
Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{ Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{
let mut app = SequencerApp::try_from(jack)?; let mut app = tek_tui::SequencerTui::try_from(jack)?;
if let Some(_) = self.name.as_ref() { if let Some(_) = self.name.as_ref() {
// TODO: sequencer.name = Arc::new(RwLock::new(name.clone())); // TODO: sequencer.name = Arc::new(RwLock::new(name.clone()));
} }

View file

@ -1,7 +1,10 @@
use tek_core::clap::{self, Parser}; use tek_api::JackActivate;
use tek_core::{*, clap::{self, Parser}};
/// Application entrypoint. /// Application entrypoint.
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
Tui::run(JackClient::new("tek_transport")?.activate_with(TransportApp::try_from)?)? Tui::run(JackClient::new("tek_transport")?.activate_with(|jack|{
tek_tui::TransportTui::try_from(jack)
})?)?;
Ok(()) Ok(())
} }

View file

@ -1,4 +1,4 @@
use tek_core::clap::{self, Parser}; use tek_core::{*, clap::{self, Parser}};
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
MixerCli::parse().run() MixerCli::parse().run()

View file

@ -1,4 +1,4 @@
use tek_core::clap::{self, Parser}; use tek_core::{*, clap::{self, Parser}};
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
PluginCli::parse().run() PluginCli::parse().run()

View file

@ -1,4 +1,4 @@
use tek_core::clap::{self, Parser}; use tek_core::{*, clap::{self, Parser}};
pub fn main () -> Usually<()> { pub fn main () -> Usually<()> {
SamplerCli::parse().run() SamplerCli::parse().run()

View file

@ -2,51 +2,51 @@ use crate::*;
/// Stores and displays time-related info. /// Stores and displays time-related info.
pub struct TransportTui { pub struct TransportTui {
pub(crate) jack: Arc<RwLock<JackClient>>, pub jack: Arc<RwLock<JackClient>>,
pub(crate) state: TransportModel, pub state: TransportModel,
pub(crate) size: Measure<Tui>, pub size: Measure<Tui>,
pub(crate) cursor: (usize, usize), pub cursor: (usize, usize),
} }
/// Root view for standalone `tek_sequencer`. /// Root view for standalone `tek_sequencer`.
pub struct SequencerTui { pub struct SequencerTui {
pub(crate) jack: Arc<RwLock<JackClient>>, pub jack: Arc<RwLock<JackClient>>,
pub(crate) transport: TransportModel, pub transport: TransportModel,
pub(crate) phrases: PhrasesModel, pub phrases: PhrasesModel,
pub(crate) player: PhrasePlayerModel, pub player: PhrasePlayerModel,
pub(crate) editor: PhraseEditorModel, pub editor: PhraseEditorModel,
pub(crate) size: Measure<Tui>, pub size: Measure<Tui>,
pub(crate) cursor: (usize, usize), pub cursor: (usize, usize),
pub(crate) split: u16, pub split: u16,
pub(crate) entered: bool, pub entered: bool,
/// MIDI output buffer /// MIDI output buffer
pub(crate) note_buf: Vec<u8>, pub note_buf: Vec<u8>,
/// MIDI output buffer /// MIDI output buffer
pub(crate) midi_buf: Vec<Vec<Vec<u8>>>, pub midi_buf: Vec<Vec<Vec<u8>>>,
} }
/// Root view for standalone `tek_arranger` /// Root view for standalone `tek_arranger`
pub struct ArrangerTui { pub struct ArrangerTui {
pub(crate) jack: Arc<RwLock<JackClient>>, pub jack: Arc<RwLock<JackClient>>,
pub(crate) transport: TransportModel, pub transport: TransportModel,
pub(crate) phrases: PhrasesModel, pub phrases: PhrasesModel,
pub(crate) tracks: Vec<ArrangerTrack>, pub tracks: Vec<ArrangerTrack>,
pub(crate) scenes: Vec<ArrangerScene>, pub scenes: Vec<ArrangerScene>,
pub(crate) name: Arc<RwLock<String>>, pub name: Arc<RwLock<String>>,
pub(crate) splits: [u16;2], pub splits: [u16;2],
pub(crate) selected: ArrangerSelection, pub selected: ArrangerSelection,
pub(crate) mode: ArrangerMode, pub mode: ArrangerMode,
pub(crate) color: ItemColor, pub color: ItemColor,
pub(crate) entered: bool, pub entered: bool,
pub(crate) size: Measure<Tui>, pub size: Measure<Tui>,
pub(crate) cursor: (usize, usize), pub cursor: (usize, usize),
pub(crate) menu_bar: Option<MenuBar<Tui, Self, ArrangerCommand>>, pub menu_bar: Option<MenuBar<Tui, Self, ArrangerCommand>>,
pub(crate) status_bar: Option<ArrangerStatus>, pub status_bar: Option<ArrangerStatus>,
pub(crate) history: Vec<ArrangerCommand>, pub history: Vec<ArrangerCommand>,
/// MIDI output buffer /// MIDI output buffer
pub(crate) note_buf: Vec<u8>, pub note_buf: Vec<u8>,
/// MIDI output buffer /// MIDI output buffer
pub(crate) midi_buf: Vec<Vec<Vec<u8>>>, pub midi_buf: Vec<Vec<Vec<u8>>>,
/// MIDI editor state /// MIDI editor state
pub(crate) editor: PhraseEditorModel, pub editor: PhraseEditorModel,
} }