port connections; DevicePorts -> PortList

This commit is contained in:
🪞👃🪞 2024-06-26 01:50:02 +03:00
parent b1df7bf4e6
commit 22b44f562b
8 changed files with 117 additions and 77 deletions

View file

@ -9,8 +9,8 @@ pub struct Launcher {
overdub: bool,
position: usize,
cursor: (usize, usize),
tracks: Vec<DynamicDevice<Sequencer>>,
chains: Vec<DynamicDevice<Chain>>,
pub tracks: Vec<DynamicDevice<Sequencer>>,
pub chains: Vec<DynamicDevice<Chain>>,
scenes: Vec<Scene>,
show_help: bool,
view: LauncherView,
@ -34,6 +34,44 @@ impl Scene {
}
}
impl Launcher {
pub fn new_with_controller (name: &str, pattern: &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);
for (i, sequencer) in state.tracks.iter().enumerate() {
for sequencer_midi_in in sequencer.midi_ins()?.iter() {
for controller in controllers.iter() {
client.connect_ports_by_name(
&controller,
&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
)?;
}
}
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)
}
pub fn new (name: &str,) -> Result<DynamicDevice<Self>, Box<dyn Error>> {
let (client, _) = Client::new(name, ClientOptions::NO_START_SERVER)?;
let transport = client.transport();
@ -127,7 +165,7 @@ impl Launcher {
}
}
}
impl DevicePorts for Launcher {}
impl PortList for Launcher {}
pub fn process (state: &mut Launcher, _: &Client, _: &ProcessScope) -> Control {
let transport = state.transport.query().unwrap();
state.playing = transport.state;