mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
50 lines
2.2 KiB
Rust
50 lines
2.2 KiB
Rust
//! Phrase editor.
|
|
include!("lib.rs");
|
|
use tek_core::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<String>,
|
|
/// Pulses per quarter note (sequencer resolution; default: 96)
|
|
#[arg(short, long)] ppq: Option<usize>,
|
|
/// Default phrase duration (in pulses; default: 4 * PPQ = 1 bar)
|
|
#[arg(short, long)] length: Option<usize>,
|
|
/// Whether to include a transport toolbar (default: true)
|
|
#[arg(short, long, default_value_t = true)] transport: bool
|
|
}
|
|
|
|
impl SequencerCli {
|
|
fn run (&self) -> Usually<()> {
|
|
let jack = Client::new("tek_arranger", ClientOptions::NO_START_SERVER)?.0;
|
|
let jack = JackClient::Inactive(jack);
|
|
let transport = Arc::new(RwLock::new(TransportToolbar::new(None, Some(jack.transport()))));
|
|
let focus_cursor = (1, 1);
|
|
let clock = transport.read().unwrap().clock.clone();
|
|
let transport = self.transport.then_some(transport);
|
|
let editor = PhraseEditor::new();
|
|
let phrases = Arc::new(RwLock::new(PhrasePool::new()));
|
|
let sequencer = Sequencer { jack: None, focus_cursor, clock, transport, editor, phrases };
|
|
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;
|
|
//}
|
|
}
|
|
let sequencer = Arc::new(RwLock::new(sequencer));
|
|
let jack = jack.activate(&sequencer.clone(), Sequencer::callback)?;
|
|
let jack = Some(jack.into());
|
|
if let Some(ref transport) = sequencer.read().unwrap().transport {
|
|
transport.write().unwrap().jack = jack.clone();
|
|
}
|
|
sequencer.write().unwrap().jack = jack.clone();
|
|
Tui::run(sequencer).map(|_|())
|
|
}
|
|
}
|