clone ports as unowned and pass outwards

This commit is contained in:
🪞👃🪞 2024-07-04 01:35:02 +03:00
parent 394355331d
commit ddaf870271
9 changed files with 123 additions and 112 deletions

View file

@ -18,7 +18,7 @@ pub struct Track {
/// Red keys on piano roll.
pub notes_on: Vec<bool>,
/// Device chain
pub devices: Vec<Arc<Mutex<Box<dyn Device>>>>,
pub devices: Vec<JackDevice>,
/// Device selector
pub device: usize,
}
@ -28,7 +28,7 @@ impl Track {
name: &str,
jack: &Client,
phrases: Option<Vec<Phrase>>,
devices: Option<Vec<Arc<Mutex<Box<dyn Device>>>>>,
devices: Option<Vec<JackDevice>>,
) -> Usually<Self> {
Ok(Self {
name: name.to_string(),
@ -44,7 +44,7 @@ impl Track {
})
}
pub fn device (&self, i: usize) -> Option<MutexGuard<Box<dyn Device>>> {
self.devices.get(i).map(|d|d.lock().unwrap())
self.devices.get(i).map(|d|d.state.lock().unwrap())
}
pub fn active_device (&self) -> Option<MutexGuard<Box<dyn Device>>> {
self.device(self.device)
@ -73,22 +73,10 @@ impl Track {
ports!(Track {
audio: {
outs: |track|{
if let Some(device) = track.last_device() {
device.audio_outs()
} else {
Ok(vec![])
}
},
outs: |_t|Ok(vec![]),
}
midi: {
ins: |track|if let Some(device) = track.first_device() {
device.midi_ins()
} else {
Ok(vec![])
},
outs: |track|Ok(vec![
&track.midi_out
]),
ins: |_t|Ok(vec![]),
outs: |_t|Ok(vec![]),
}
});