mirror of
https://codeberg.org/unspeaker/tek.git
synced 2026-02-21 16:29:04 +01:00
refactor(app) what is UP with that init
This commit is contained in:
parent
9b4f7f25c1
commit
49a5451af2
1 changed files with 44 additions and 28 deletions
56
app/tek.rs
56
app/tek.rs
|
|
@ -908,8 +908,20 @@ pub mod glue {
|
||||||
midi_from, midi_from_re, midi_to, midi_to_re,
|
midi_from, midi_from_re, midi_to, midi_to_re,
|
||||||
left_from, right_from, left_to, right_to, ..
|
left_from, right_from, left_to, right_to, ..
|
||||||
} = &self.action {
|
} = &self.action {
|
||||||
|
|
||||||
|
// Connect to JACK
|
||||||
let name = name.as_ref().map_or("tek", |x|x.as_str());
|
let name = name.as_ref().map_or("tek", |x|x.as_str());
|
||||||
let jack = Jack::new(&name)?;
|
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::<Result<Vec<_>, _>>()?;
|
||||||
|
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::<Result<Vec<_>, _>>()?;
|
||||||
|
|
||||||
|
// TODO: Collect audio IO:
|
||||||
let empty = &[] as &[&str];
|
let empty = &[] as &[&str];
|
||||||
let left_froms = Connect::collect(&left_from, empty, empty);
|
let left_froms = Connect::collect(&left_from, empty, empty);
|
||||||
let left_tos = Connect::collect(&left_to, empty, empty);
|
let left_tos = Connect::collect(&left_to, empty, empty);
|
||||||
|
|
@ -917,27 +929,33 @@ pub mod glue {
|
||||||
let right_tos = Connect::collect(&right_to, empty, empty);
|
let right_tos = Connect::collect(&right_to, empty, empty);
|
||||||
let _audio_froms = &[left_froms.as_slice(), right_froms.as_slice()];
|
let _audio_froms = &[left_froms.as_slice(), right_froms.as_slice()];
|
||||||
let _audio_tos = &[left_tos.as_slice(), right_tos.as_slice()];
|
let _audio_tos = &[left_tos.as_slice(), right_tos.as_slice()];
|
||||||
let mut midi_ins = vec![];
|
|
||||||
let mut midi_outs = vec![];
|
// Create initial project:
|
||||||
for (index, connect) in Connect::collect(&midi_from, &[] as &[&str], &midi_from_re).iter().enumerate() {
|
let clock = Clock::new(&jack, *bpm)?;
|
||||||
midi_ins.push(jack.midi_in(&format!("M/{index}"), &[connect.clone()])?);
|
let mut project = Arrangement::new(&jack, None, clock, vec![], vec![],
|
||||||
}
|
midi_ins, midi_outs);
|
||||||
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
|
|
||||||
);
|
|
||||||
project.tracks_add(tracks.unwrap_or(0), None, &[], &[])?;
|
project.tracks_add(tracks.unwrap_or(0), None, &[], &[])?;
|
||||||
project.scenes_add(scenes.unwrap_or(0))?;
|
project.scenes_add(scenes.unwrap_or(0))?;
|
||||||
|
|
||||||
if matches!(self.action, Action::Status) {
|
if matches!(self.action, Action::Status) {
|
||||||
|
|
||||||
|
// Show status and exit
|
||||||
self.show_status(&project);
|
self.show_status(&project);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
// Initialize the app state
|
||||||
let app = App::new(&jack, project, config, ":menu");
|
let app = App::new(&jack, project, config, ":menu");
|
||||||
let client = jack.run(move|jack|{
|
|
||||||
|
if matches!(self.action, Action::Headless) {
|
||||||
|
|
||||||
|
// TODO: Headless mode (daemon + client over IPC, then over network...)
|
||||||
|
println!("todo headless");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Run the [Tui] and [Jack] threads with the [App] state.
|
||||||
|
Tui::run(true, jack.run(move|jack|{
|
||||||
jack.sync_lead(*sync_lead, |mut state|{
|
jack.sync_lead(*sync_lead, |mut state|{
|
||||||
let clock = app.clock();
|
let clock = app.clock();
|
||||||
clock.playhead.update_from_sample(state.position.frame() as f64);
|
clock.playhead.update_from_sample(state.position.frame() as f64);
|
||||||
|
|
@ -946,12 +964,10 @@ pub mod glue {
|
||||||
})?;
|
})?;
|
||||||
jack.sync_follow(*sync_follow)?;
|
jack.sync_follow(*sync_follow)?;
|
||||||
Ok(app)
|
Ok(app)
|
||||||
})?;
|
})?)?;
|
||||||
if matches!(self.action, Action::Headless) {
|
|
||||||
println!("todo headless");
|
|
||||||
} else {
|
|
||||||
Tui::run(&client)?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue