From da1d3220f95512c814b3d37ff87833faf957d366 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Wed, 26 Jun 2024 01:58:16 +0300 Subject: [PATCH] autoconnect to controller and ports --- src/device/launcher.rs | 51 ++++++++++++++++++++++++++---------------- src/main.rs | 9 +++++++- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/device/launcher.rs b/src/device/launcher.rs index 48717def..060b52ff 100644 --- a/src/device/launcher.rs +++ b/src/device/launcher.rs @@ -34,40 +34,53 @@ impl Scene { } } impl Launcher { - pub fn new_with_controller (name: &str, pattern: &str) + pub fn new_with_controller ( + name: &str, + midi_in: &str, + audio_outs: &[&str], + ) -> Result, Box> { let launcher = Self::new(name)?; { let state = &launcher.state(); - let (client, _status) = Client::new(&format!("{name}-init"), ClientOptions::NO_START_SERVER)?; - let controllers = client.ports(Some(pattern), None, ::jack::PortFlags::IS_OUTPUT); + let (client, _status) = Client::new( + &format!("{name}-init"), + ClientOptions::NO_START_SERVER + )?; + let midi_ins = client.ports( + Some(midi_in), + None, + ::jack::PortFlags::IS_OUTPUT + ); + let audio_outs: Vec> = audio_outs + .iter() + .map(|pattern|client.ports( + Some(pattern), + None, + ::jack::PortFlags::IS_INPUT + )) + .collect(); for (i, sequencer) in state.tracks.iter().enumerate() { for sequencer_midi_in in sequencer.midi_ins()?.iter() { - for controller in controllers.iter() { + for midi_in in midi_ins.iter() { client.connect_ports_by_name( - &controller, + &midi_in, &sequencer_midi_in )?; } } let chain: &DynamicDevice = &state.chains[i]; - for sequencer_midi_out in sequencer.midi_outs()?.iter() { - for chain_midi_in in chain.midi_ins()?.iter() { - client.connect_ports_by_name( - &sequencer_midi_out, - &chain_midi_in - )?; + for midi_out in sequencer.midi_outs()?.iter() { + for midi_in in chain.midi_ins()?.iter() { + client.connect_ports_by_name(&midi_out, &midi_in)?; + } + } + for (j, port) in chain.audio_outs()?.iter().enumerate() { + for audio_out in audio_outs[j % audio_outs.len()].iter() { + client.connect_ports_by_name(&port, &audio_out); } } - client.connect_ports_by_name( - &chain.audio_outs()?[0], - "Komplete Audio 6 Analog Stereo 1/2:playback_FL" - ); - client.connect_ports_by_name( - &chain.audio_outs()?[1], - "Komplete Audio 6 Analog Stereo 1/2:playback_FR" - ); } } Ok(launcher) diff --git a/src/main.rs b/src/main.rs index 4e976381..8b94f264 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,5 +19,12 @@ fn main () -> Result<(), Box> { let _cli = cli::Cli::parse(); let xdg = microxdg::XdgApp::new("dawdle")?; crate::config::create_dirs(&xdg)?; - run(Launcher::new_with_controller("Launcher#0", ".*nanoKEY.*")?) + run(Launcher::new_with_controller( + "Launcher#0", + ".*nanoKEY.*", + &[ + "Komplete.*:playback_FL", + "Komplete.*:playback_FR", + ] + )?) }