use tek_api::JackActivate; use tek_core::{*, jack::{MidiIn, MidiOut}, clap::{self, Parser}}; pub fn main () -> Usually<()> { SequencerCli::parse().run() } #[derive(Debug, Parser)] #[command(version, about, long_about = None)] pub struct SequencerCli { /// Name of JACK client #[arg(short, long)] name: Option, /// Pulses per quarter note (sequencer resolution; default: 96) #[arg(short, long)] ppq: Option, /// Default phrase duration (in pulses; default: 4 * PPQ = 1 bar) #[arg(short, long)] length: Option, /// Whether to include a transport toolbar (default: true) #[arg(short, long, default_value_t = true)] transport: bool } impl SequencerCli { fn run (&self) -> Usually<()> { Tui::run(JackClient::new("tek_sequencer")?.activate_with(|jack|{ let mut app = tek_tui::SequencerTui::try_from(jack)?; // TODO: create from arguments let midi_in = app.jack.read().unwrap().register_port("in", MidiIn::default())?; app.player.midi_ins.push(midi_in); let midi_out = app.jack.read().unwrap().register_port("out", MidiOut::default())?; app.player.midi_outs.push(midi_out); if let Some(_) = self.name.as_ref() { // TODO: sequencer.name = Arc::new(RwLock::new(name.clone())); } if let Some(_) = self.ppq { // TODO: sequencer.ppq = ppq; } if let Some(_) = self.length { // TODO: if let Some(phrase) = sequencer.phrase.as_mut() { //phrase.write().unwrap().length = length; //} } Ok(app) })?)?; Ok(()) } }