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

@ -20,13 +20,13 @@ impl Sequence {
}
pub struct Sequencer {
pub name: String,
pub name: String,
/// JACK transport handle.
transport: ::jack::Transport,
transport: ::jack::Transport,
/// JACK MIDI input port that will be created.
input_port: Port<MidiIn>,
pub midi_in: Port<MidiIn>,
/// JACK MIDI output port that will be created.
output_port: Port<MidiOut>,
pub midi_out: Port<MidiOut>,
/// Holds info about tempo
timebase: Arc<Timebase>,
@ -79,8 +79,8 @@ impl Sequencer {
let state = transport.query_state()?;
DynamicDevice::new(render, handle, Self::process, Self {
name: name.into(),
input_port: client.register_port("in", MidiIn::default())?,
output_port: client.register_port("out", MidiOut::default())?,
midi_in: client.register_port("in", MidiIn::default())?,
midi_out: client.register_port("out", MidiOut::default())?,
timebase: timebase.clone(),
steps: 64,
@ -155,7 +155,7 @@ impl Sequencer {
}
// Read from input, write inputs to sequence and/or output buffer
for event in self.input_port.iter(scope) {
for event in self.midi_in.iter(scope) {
let tick = tick as u32;
let msg = midly::live::LiveEvent::parse(event.bytes).unwrap();
match msg {
@ -208,7 +208,7 @@ impl Sequencer {
// Write to port from output buffer
// (containing notes from sequence and/or monitor)
let mut writer = self.output_port.writer(scope);
let mut writer = self.midi_out.writer(scope);
for time in 0..scope.n_frames() {
if let Some(Some(frame)) = output.get_mut(time as usize) {
for event in frame.iter() {
@ -222,12 +222,12 @@ impl Sequencer {
}
}
impl DevicePorts for Sequencer {
impl PortList for Sequencer {
fn midi_ins (&self) -> Usually<Vec<String>> {
Ok(vec!["in".into()])
Ok(vec![self.midi_in.name()?])
}
fn midi_outs (&self) -> Usually<Vec<String>> {
Ok(vec!["out".into()])
Ok(vec![self.midi_out.name()?])
}
}