//! Phrase editor. include!("lib.rs"); pub fn main () -> Usually<()> { Tui::run(Arc::new(RwLock::new(crate::Sequencer::from_args()))).map(|_|()) } use tek_core::clap::{self, Parser}; #[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)] transport: Option } impl Sequencer { pub fn from_args () -> Self { let args = SequencerCli::parse(); let mut seq = Self::new(""); if let Some(name) = args.name { seq.name = Arc::new(RwLock::new(name.clone())); } if let Some(ppq) = args.ppq { seq.ppq = ppq; } if let Some(length) = args.length { if let Some(phrase) = seq.phrase.as_mut() { phrase.write().unwrap().length = length; } } if args.transport == Some(true) { seq.transport = Some(Arc::new(RwLock::new(TransportToolbar::new(None)))); } seq } }