mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
autoconnect to controller and ports
This commit is contained in:
parent
22b44f562b
commit
da1d3220f9
2 changed files with 40 additions and 20 deletions
|
|
@ -34,40 +34,53 @@ impl Scene {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl Launcher {
|
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>>
|
-> Result<DynamicDevice<Self>, Box<dyn Error>>
|
||||||
{
|
{
|
||||||
let launcher = Self::new(name)?;
|
let launcher = Self::new(name)?;
|
||||||
{
|
{
|
||||||
let state = &launcher.state();
|
let state = &launcher.state();
|
||||||
let (client, _status) = Client::new(&format!("{name}-init"), ClientOptions::NO_START_SERVER)?;
|
let (client, _status) = Client::new(
|
||||||
let controllers = client.ports(Some(pattern), None, ::jack::PortFlags::IS_OUTPUT);
|
&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 (i, sequencer) in state.tracks.iter().enumerate() {
|
||||||
for sequencer_midi_in in sequencer.midi_ins()?.iter() {
|
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(
|
client.connect_ports_by_name(
|
||||||
&controller,
|
&midi_in,
|
||||||
&sequencer_midi_in
|
&sequencer_midi_in
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let chain: &DynamicDevice<Chain> = &state.chains[i];
|
let chain: &DynamicDevice<Chain> = &state.chains[i];
|
||||||
for sequencer_midi_out in sequencer.midi_outs()?.iter() {
|
for midi_out in sequencer.midi_outs()?.iter() {
|
||||||
for chain_midi_in in chain.midi_ins()?.iter() {
|
for midi_in in chain.midi_ins()?.iter() {
|
||||||
client.connect_ports_by_name(
|
client.connect_ports_by_name(&midi_out, &midi_in)?;
|
||||||
&sequencer_midi_out,
|
}
|
||||||
&chain_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)
|
Ok(launcher)
|
||||||
|
|
|
||||||
|
|
@ -19,5 +19,12 @@ fn main () -> Result<(), Box<dyn Error>> {
|
||||||
let _cli = cli::Cli::parse();
|
let _cli = cli::Cli::parse();
|
||||||
let xdg = microxdg::XdgApp::new("dawdle")?;
|
let xdg = microxdg::XdgApp::new("dawdle")?;
|
||||||
crate::config::create_dirs(&xdg)?;
|
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",
|
||||||
|
]
|
||||||
|
)?)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue