mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
remove DynamicDevice from plugin
This commit is contained in:
parent
a103818a2e
commit
55a85fafef
3 changed files with 73 additions and 75 deletions
|
|
@ -16,7 +16,21 @@ pub struct Plugin {
|
||||||
pub midi_outs: Vec<Port<MidiOut>>,
|
pub midi_outs: Vec<Port<MidiOut>>,
|
||||||
pub audio_ins: Vec<Port<AudioIn>>,
|
pub audio_ins: Vec<Port<AudioIn>>,
|
||||||
pub audio_outs: Vec<Port<AudioOut>>,
|
pub audio_outs: Vec<Port<AudioOut>>,
|
||||||
|
pub jack: Client,
|
||||||
}
|
}
|
||||||
|
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()),
|
||||||
|
}
|
||||||
|
midi: {
|
||||||
|
ins: |track|Ok(track.midi_ins.iter().collect()),
|
||||||
|
outs: |track|Ok(track.midi_outs.iter().collect()),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
pub enum PluginKind {
|
pub enum PluginKind {
|
||||||
LV2(LV2Plugin),
|
LV2(LV2Plugin),
|
||||||
|
|
@ -26,60 +40,11 @@ pub enum PluginKind {
|
||||||
VST3,
|
VST3,
|
||||||
}
|
}
|
||||||
|
|
||||||
const HELM: &'static str = "file:///nix/store/ij3sz7nqg5l7v2dygdvzy3w6cj62bd6r-helm-0.9.0/lib/lv2/helm.lv2";
|
|
||||||
|
|
||||||
impl Plugin {
|
impl Plugin {
|
||||||
/// Load a LV2 plugin.
|
/// Load a LV2 plugin.
|
||||||
pub fn lv2 (name: &str, path: &str) -> Usually<DynamicDevice<Self>> {
|
pub fn new (name: &str) -> Usually<Self> {
|
||||||
let host = Self::new(name)?;
|
let (jack, _) = Client::new(name, ClientOptions::NO_START_SERVER)?;
|
||||||
let plugin = LV2Plugin::new(path)?;
|
Ok(Self {
|
||||||
let mut state = host.state();
|
|
||||||
let client = host.client.as_ref().unwrap().as_client();
|
|
||||||
let (midi_ins, midi_outs, audio_ins, audio_outs) = (
|
|
||||||
plugin.plugin.port_counts().atom_sequence_inputs,
|
|
||||||
plugin.plugin.port_counts().atom_sequence_outputs,
|
|
||||||
plugin.plugin.port_counts().audio_inputs,
|
|
||||||
plugin.plugin.port_counts().audio_outputs,
|
|
||||||
);
|
|
||||||
state.midi_ins = {
|
|
||||||
let mut ports = vec![];
|
|
||||||
for i in 0..midi_ins {
|
|
||||||
ports.push(client.register_port(&format!("midi-in-{i}"), MidiIn::default())?)
|
|
||||||
}
|
|
||||||
ports
|
|
||||||
};
|
|
||||||
state.midi_outs = {
|
|
||||||
let mut ports = vec![];
|
|
||||||
for i in 0..midi_outs {
|
|
||||||
ports.push(client.register_port(&format!("midi-out-{i}"), MidiOut::default())?)
|
|
||||||
}
|
|
||||||
ports
|
|
||||||
};
|
|
||||||
state.audio_ins = {
|
|
||||||
let mut ports = vec![];
|
|
||||||
for i in 0..audio_ins {
|
|
||||||
ports.push(client.register_port(&format!("audio-in-{i}"), AudioIn::default())?)
|
|
||||||
}
|
|
||||||
ports
|
|
||||||
};
|
|
||||||
state.audio_outs = {
|
|
||||||
let mut ports = vec![];
|
|
||||||
for i in 0..audio_outs {
|
|
||||||
ports.push(client.register_port(&format!("audio-out-{i}"), AudioOut::default())?)
|
|
||||||
}
|
|
||||||
ports
|
|
||||||
};
|
|
||||||
state.plugin = Some(PluginKind::LV2(plugin));
|
|
||||||
state.path = Some(String::from(path));
|
|
||||||
std::mem::drop(state);
|
|
||||||
Ok(host)
|
|
||||||
}
|
|
||||||
pub fn new (name: &str) -> Usually<DynamicDevice<Self>> {
|
|
||||||
DynamicDevice::new(
|
|
||||||
crate::view::plugin::render,
|
|
||||||
crate::control::plugin::handle,
|
|
||||||
Self::process,
|
|
||||||
Self {
|
|
||||||
name: name.into(),
|
name: name.into(),
|
||||||
path: None,
|
path: None,
|
||||||
plugin: None,
|
plugin: None,
|
||||||
|
|
@ -89,8 +54,8 @@ impl Plugin {
|
||||||
midi_outs: vec![],
|
midi_outs: vec![],
|
||||||
audio_ins: vec![],
|
audio_ins: vec![],
|
||||||
audio_outs: vec![],
|
audio_outs: vec![],
|
||||||
}
|
jack,
|
||||||
).activate(Client::new(name, ClientOptions::NO_START_SERVER)?.0)
|
})
|
||||||
}
|
}
|
||||||
pub fn process (&mut self, _: &Client, scope: &ProcessScope) -> Control {
|
pub fn process (&mut self, _: &Client, scope: &ProcessScope) -> Control {
|
||||||
match self.plugin.as_mut() {
|
match self.plugin.as_mut() {
|
||||||
|
|
@ -143,14 +108,3 @@ impl Plugin {
|
||||||
Control::Continue
|
Control::Continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ports!(Plugin {
|
|
||||||
audio: {
|
|
||||||
ins: |track|Ok(track.audio_ins.iter().collect()),
|
|
||||||
outs: |track|Ok(track.audio_outs.iter().collect()),
|
|
||||||
}
|
|
||||||
midi: {
|
|
||||||
ins: |track|Ok(track.midi_ins.iter().collect()),
|
|
||||||
outs: |track|Ok(track.midi_outs.iter().collect()),
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
|
||||||
|
|
@ -40,3 +40,47 @@ impl LV2Plugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl super::Plugin {
|
||||||
|
pub fn lv2 (name: &str, path: &str) -> Usually<Self> {
|
||||||
|
let mut host = Self::new(name)?;
|
||||||
|
let plugin = LV2Plugin::new(path)?;
|
||||||
|
let client = &host.jack;
|
||||||
|
let (midi_ins, midi_outs, audio_ins, audio_outs) = (
|
||||||
|
plugin.plugin.port_counts().atom_sequence_inputs,
|
||||||
|
plugin.plugin.port_counts().atom_sequence_outputs,
|
||||||
|
plugin.plugin.port_counts().audio_inputs,
|
||||||
|
plugin.plugin.port_counts().audio_outputs,
|
||||||
|
);
|
||||||
|
host.midi_ins = {
|
||||||
|
let mut ports = vec![];
|
||||||
|
for i in 0..midi_ins {
|
||||||
|
ports.push(client.register_port(&format!("midi-in-{i}"), MidiIn::default())?)
|
||||||
|
}
|
||||||
|
ports
|
||||||
|
};
|
||||||
|
host.midi_outs = {
|
||||||
|
let mut ports = vec![];
|
||||||
|
for i in 0..midi_outs {
|
||||||
|
ports.push(client.register_port(&format!("midi-out-{i}"), MidiOut::default())?)
|
||||||
|
}
|
||||||
|
ports
|
||||||
|
};
|
||||||
|
host.audio_ins = {
|
||||||
|
let mut ports = vec![];
|
||||||
|
for i in 0..audio_ins {
|
||||||
|
ports.push(client.register_port(&format!("audio-in-{i}"), AudioIn::default())?)
|
||||||
|
}
|
||||||
|
ports
|
||||||
|
};
|
||||||
|
host.audio_outs = {
|
||||||
|
let mut ports = vec![];
|
||||||
|
for i in 0..audio_outs {
|
||||||
|
ports.push(client.register_port(&format!("audio-out-{i}"), AudioOut::default())?)
|
||||||
|
}
|
||||||
|
ports
|
||||||
|
};
|
||||||
|
host.plugin = Some(super::PluginKind::LV2(plugin));
|
||||||
|
host.path = Some(String::from(path));
|
||||||
|
Ok(host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ render!(App |self, buf, area| {
|
||||||
|
|
||||||
y = y + TransportView {
|
y = y + TransportView {
|
||||||
timebase: &self.timebase,
|
timebase: &self.timebase,
|
||||||
playing: *self.playing.as_ref().unwrap(),
|
playing: *self.playing.as_ref().unwrap_or(&TransportState::Stopped),
|
||||||
record: false,
|
record: false,
|
||||||
overdub: false,
|
overdub: false,
|
||||||
monitor: false,
|
monitor: false,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue