mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-15 16:06:41 +01:00
wip: connect devices
This commit is contained in:
parent
7f3425fe04
commit
394355331d
10 changed files with 235 additions and 145 deletions
|
|
@ -7,28 +7,24 @@ pub mod vst3;
|
|||
use self::lv2::*;
|
||||
|
||||
pub struct Plugin {
|
||||
pub name: String,
|
||||
pub path: Option<String>,
|
||||
pub plugin: Option<PluginKind>,
|
||||
pub selected: usize,
|
||||
pub mapping: bool,
|
||||
pub midi_ins: Vec<Port<MidiIn>>,
|
||||
pub midi_outs: Vec<Port<MidiOut>>,
|
||||
pub audio_ins: Vec<Port<AudioIn>>,
|
||||
pub audio_outs: Vec<Port<AudioOut>>,
|
||||
pub jack: Client,
|
||||
pub name: String,
|
||||
pub path: Option<String>,
|
||||
pub plugin: Option<PluginKind>,
|
||||
pub selected: usize,
|
||||
pub mapping: bool,
|
||||
pub ports: JackPorts,
|
||||
}
|
||||
render!(Plugin = crate::view::plugin::render);
|
||||
handle!(Plugin = crate::control::plugin::handle);
|
||||
process!(Plugin = Plugin::process);
|
||||
ports!(Plugin {
|
||||
audio: {
|
||||
ins: |track|Ok(track.audio_ins.iter().collect()),
|
||||
outs: |track|Ok(track.audio_outs.iter().collect()),
|
||||
ins: |p|Ok(p.ports.audio_ins.values().collect()),
|
||||
outs: |p|Ok(p.ports.audio_outs.values().collect()),
|
||||
}
|
||||
midi: {
|
||||
ins: |track|Ok(track.midi_ins.iter().collect()),
|
||||
outs: |track|Ok(track.midi_outs.iter().collect()),
|
||||
ins: |p|Ok(p.ports.midi_ins.values().collect()),
|
||||
outs: |p|Ok(p.ports.midi_outs.values().collect()),
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -41,20 +37,15 @@ pub enum PluginKind {
|
|||
}
|
||||
|
||||
impl Plugin {
|
||||
/// Load a LV2 plugin.
|
||||
/// Create a plugin host device.
|
||||
pub fn new (name: &str) -> Usually<Self> {
|
||||
let (jack, _) = Client::new(name, ClientOptions::NO_START_SERVER)?;
|
||||
Ok(Self {
|
||||
name: name.into(),
|
||||
path: None,
|
||||
plugin: None,
|
||||
selected: 0,
|
||||
mapping: false,
|
||||
midi_ins: vec![],
|
||||
midi_outs: vec![],
|
||||
audio_ins: vec![],
|
||||
audio_outs: vec![],
|
||||
jack,
|
||||
ports: JackPorts::default()
|
||||
})
|
||||
}
|
||||
pub fn process (&mut self, _: &Client, scope: &ProcessScope) -> Control {
|
||||
|
|
@ -62,7 +53,7 @@ impl Plugin {
|
|||
Some(PluginKind::LV2(LV2Plugin { features, ref mut instance, .. })) => {
|
||||
let urid = features.midi_urid();
|
||||
let mut inputs = vec![];
|
||||
for port in self.midi_ins.iter() {
|
||||
for port in self.ports.midi_ins.values() {
|
||||
let mut atom = ::livi::event::LV2AtomSequence::new(
|
||||
&features,
|
||||
scope.n_frames() as usize
|
||||
|
|
@ -80,7 +71,7 @@ impl Plugin {
|
|||
inputs.push(atom);
|
||||
}
|
||||
let mut outputs = vec![];
|
||||
for _ in self.midi_outs.iter() {
|
||||
for _ in self.ports.midi_outs.iter() {
|
||||
outputs.push(::livi::event::LV2AtomSequence::new(
|
||||
&features,
|
||||
scope.n_frames() as usize
|
||||
|
|
@ -94,10 +85,10 @@ impl Plugin {
|
|||
outputs.iter_mut()
|
||||
)
|
||||
.with_audio_inputs(
|
||||
self.audio_ins.iter().map(|o|o.as_slice(scope))
|
||||
self.ports.audio_ins.values().map(|o|o.as_slice(scope))
|
||||
)
|
||||
.with_audio_outputs(
|
||||
self.audio_outs.iter_mut().map(|o|o.as_mut_slice(scope))
|
||||
self.ports.audio_outs.values_mut().map(|o|o.as_mut_slice(scope))
|
||||
);
|
||||
unsafe {
|
||||
instance.run(scope.n_frames() as usize, ports).unwrap()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue