mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
implement ConnectPort
This commit is contained in:
parent
0cca06e054
commit
9e4406c66a
4 changed files with 77 additions and 64 deletions
|
|
@ -82,6 +82,67 @@ impl RegisterPort for Arc<RwLock<JackConnection>> {
|
|||
}
|
||||
}
|
||||
|
||||
pub trait ConnectPort {
|
||||
fn port_by_name (&self, name: impl AsRef<str>) -> Option<Port<Unowned>>;
|
||||
fn connect_ports <A: PortSpec, B: PortSpec> (&self, source: &Port<A>, target: &Port<B>)
|
||||
-> Usually<()>;
|
||||
fn connect_midi_from (&self, input: &Port<MidiIn>, ports: &[impl AsRef<str>]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
let port = port.as_ref();
|
||||
if let Some(port) = self.port_by_name(port).as_ref() {
|
||||
self.connect_ports(port, input)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}. Use jack_lsp to list all port names.");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn connect_midi_to (&self, output: &Port<MidiOut>, ports: &[impl AsRef<str>]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
let port = port.as_ref();
|
||||
if let Some(port) = self.port_by_name(port).as_ref() {
|
||||
self.connect_ports(output, port)?;
|
||||
} else {
|
||||
panic!("Missing MIDI input: {port}. Use jack_lsp to list all port names.");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn connect_audio_from (&self, input: &Port<AudioIn>, ports: &[impl AsRef<str>]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
let port = port.as_ref();
|
||||
if let Some(port) = self.port_by_name(port).as_ref() {
|
||||
self.connect_ports(port, input)?;
|
||||
} else {
|
||||
panic!("Missing MIDI output: {port}. Use jack_lsp to list all port names.");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn connect_audio_to (&self, output: &Port<AudioOut>, ports: &[impl AsRef<str>]) -> Usually<()> {
|
||||
for port in ports.iter() {
|
||||
let port = port.as_ref();
|
||||
if let Some(port) = self.port_by_name(port).as_ref() {
|
||||
self.connect_ports(output, port)?;
|
||||
} else {
|
||||
panic!("Missing MIDI input: {port}. Use jack_lsp to list all port names.");
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl ConnectPort for Arc<RwLock<JackConnection>> {
|
||||
fn port_by_name (&self, name: impl AsRef<str>) -> Option<Port<Unowned>> {
|
||||
self.read().unwrap().client().port_by_name(name.as_ref())
|
||||
}
|
||||
fn connect_ports <A: PortSpec, B: PortSpec> (&self, source: &Port<A>, target: &Port<B>)
|
||||
-> Usually<()>
|
||||
{
|
||||
Ok(self.read().unwrap().client().connect_ports(source, target)?)
|
||||
}
|
||||
}
|
||||
|
||||
///// Collection of JACK ports as [AudioIn]/[AudioOut]/[MidiIn]/[MidiOut].
|
||||
//#[derive(Default, Debug)]
|
||||
//pub struct JackPorts {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue