mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip: fixing refactor errors pt.3
This commit is contained in:
parent
7909caf6a8
commit
adf5b3f0f8
3 changed files with 48 additions and 29 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -2666,6 +2666,7 @@ dependencies = [
|
||||||
"tek_core",
|
"tek_core",
|
||||||
"uuid",
|
"uuid",
|
||||||
"vst",
|
"vst",
|
||||||
|
"wavers",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -212,6 +212,24 @@ pub struct Plugin {
|
||||||
pub mapping: bool,
|
pub mapping: bool,
|
||||||
pub ports: JackPorts,
|
pub ports: JackPorts,
|
||||||
}
|
}
|
||||||
|
impl Plugin {
|
||||||
|
pub fn new_lv2 (
|
||||||
|
jack: &Arc<RwLock<JackClient>>,
|
||||||
|
name: &str,
|
||||||
|
path: &str,
|
||||||
|
) -> Usually<JackDevice> {
|
||||||
|
let plugin = LV2Plugin::new(path)?;
|
||||||
|
jack_from_lv2(name, &plugin.plugin)?.run(|ports|Box::new(Self {
|
||||||
|
jack: jack.clone(),
|
||||||
|
name: name.into(),
|
||||||
|
path: Some(String::from(path)),
|
||||||
|
plugin: Some(PluginKind::LV2(plugin)),
|
||||||
|
selected: 0,
|
||||||
|
mapping: false,
|
||||||
|
ports
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Supported plugin formats.
|
/// Supported plugin formats.
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
|
@ -243,3 +261,32 @@ pub struct LV2Plugin {
|
||||||
pub input_buffer: Vec<livi::event::LV2AtomSequence>,
|
pub input_buffer: Vec<livi::event::LV2AtomSequence>,
|
||||||
pub ui_thread: Option<JoinHandle<()>>,
|
pub ui_thread: Option<JoinHandle<()>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl LV2Plugin {
|
||||||
|
const INPUT_BUFFER: usize = 1024;
|
||||||
|
pub fn new (uri: &str) -> Usually<Self> {
|
||||||
|
let world = livi::World::with_load_bundle(&uri);
|
||||||
|
let features = world
|
||||||
|
.build_features(livi::FeaturesBuilder {
|
||||||
|
min_block_length: 1,
|
||||||
|
max_block_length: 65536,
|
||||||
|
});
|
||||||
|
let plugin = world
|
||||||
|
.iter_plugins()
|
||||||
|
.nth(0)
|
||||||
|
.expect(&format!("plugin not found: {uri}"));
|
||||||
|
Ok(Self {
|
||||||
|
instance: unsafe {
|
||||||
|
plugin
|
||||||
|
.instantiate(features.clone(), 48000.0)
|
||||||
|
.expect(&format!("instantiate failed: {uri}"))
|
||||||
|
},
|
||||||
|
port_list: plugin.ports().collect::<Vec<_>>(),
|
||||||
|
input_buffer: Vec::with_capacity(Self::INPUT_BUFFER),
|
||||||
|
ui_thread: None,
|
||||||
|
world,
|
||||||
|
features,
|
||||||
|
plugin,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,32 +31,3 @@ impl<E> Plugin<E> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E: Engine> Plugin<E> {
|
|
||||||
pub fn new_lv2 (
|
|
||||||
jack: &Arc<RwLock<JackClient>>,
|
|
||||||
name: &str,
|
|
||||||
path: &str,
|
|
||||||
) -> Usually<JackDevice<E>> {
|
|
||||||
let plugin = LV2Plugin::new(path)?;
|
|
||||||
jack_from_lv2(name, &plugin.plugin)?.run(|ports|Box::new(Self {
|
|
||||||
_engine: Default::default(),
|
|
||||||
jack: jack.clone(),
|
|
||||||
name: name.into(),
|
|
||||||
path: Some(String::from(path)),
|
|
||||||
plugin: Some(PluginKind::LV2(plugin)),
|
|
||||||
selected: 0,
|
|
||||||
mapping: false,
|
|
||||||
ports
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Supported plugin formats.
|
|
||||||
pub enum PluginKind {
|
|
||||||
LV2(LV2Plugin),
|
|
||||||
VST2 {
|
|
||||||
instance: ::vst::host::PluginInstance
|
|
||||||
},
|
|
||||||
VST3,
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue