autoconnect to controller and ports

This commit is contained in:
🪞👃🪞 2024-06-26 01:58:16 +03:00
parent 22b44f562b
commit da1d3220f9
2 changed files with 40 additions and 20 deletions

View file

@ -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<DynamicDevice<Self>, Box<dyn Error>>
{
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<Vec<String>> = 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<Chain> = &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)

View file

@ -19,5 +19,12 @@ fn main () -> Result<(), Box<dyn Error>> {
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",
]
)?)
}