mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-10 21:56:42 +01:00
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use crate::core::*;
|
|
use crate::device::*;
|
|
use crate::layout::*;
|
|
pub struct Track {
|
|
pub name: String,
|
|
pub sequencer: DynamicDevice<Sequencer>,
|
|
pub chain: DynamicDevice<Chain>,
|
|
}
|
|
impl Track {
|
|
pub fn new (
|
|
name: &str,
|
|
tempo: &Arc<Timebase>,
|
|
devices: Option<Vec<Box<dyn Device>>>,
|
|
phrases: Option<Vec<Phrase>>,
|
|
) -> Usually<Self> {
|
|
let sequencer = Sequencer::new(&name, tempo, phrases)?;
|
|
let chain = Chain::new(&name, devices)?;
|
|
{
|
|
if let (Some(output), Some(input)) = (
|
|
sequencer.midi_outs()?.get(0).clone(),
|
|
if let Some(item) = chain.state().items.get(0) {
|
|
if let Some(port) = item.midi_ins()?.get(0) {
|
|
Some(port.clone())
|
|
} else {
|
|
None
|
|
}
|
|
} else {
|
|
None
|
|
}
|
|
) {
|
|
if let Some(client) = &sequencer.client {
|
|
client.as_client().connect_ports_by_name(&output, &input)?;
|
|
}
|
|
}
|
|
}
|
|
Ok(Self { name: name.to_string(), sequencer, chain })
|
|
}
|
|
}
|
|
impl PortList for Track {
|
|
fn midi_ins (&self) -> Usually<Vec<String>> {
|
|
self.sequencer.midi_ins()
|
|
}
|
|
fn audio_outs (&self) -> Usually<Vec<String>> {
|
|
self.chain.audio_outs()
|
|
}
|
|
}
|