mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56: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 {
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
]
|
||||
)?)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue