sim_lib_plugin_vst3/
adapter.rs1use sim_kernel::Result;
2use sim_lib_audio_dsp::Gain;
3use sim_lib_audio_graph_core::{PrepareConfig, ProcessBlock, Processor};
4use sim_lib_plugin_core::{PluginDescriptor, PluginInstance, PluginState, ProcessorPlugin};
5
6use crate::{Vst3ParamMap, vst3_gain_descriptor};
7
8#[derive(Clone, Debug)]
15pub struct Vst3ExportedProcessor<P> {
16 inner: ProcessorPlugin<P>,
17 param_map: Vst3ParamMap,
18}
19
20impl<P> Vst3ExportedProcessor<P> {
21 pub fn new(descriptor: PluginDescriptor, processor: P, param_map: Vst3ParamMap) -> Self {
24 Self {
25 inner: ProcessorPlugin::new(descriptor, processor),
26 param_map,
27 }
28 }
29
30 pub fn param_map(&self) -> &Vst3ParamMap {
32 &self.param_map
33 }
34}
35
36sim_lib_plugin_core::forward_plugin_instance!(Vst3ExportedProcessor);
37
38pub fn export_processor_as_vst3<P: Processor>(
44 descriptor: PluginDescriptor,
45 processor: P,
46) -> Vst3ExportedProcessor<P> {
47 let param_map = Vst3ParamMap::identity(descriptor.parameters.iter().map(|param| param.id));
48 Vst3ExportedProcessor::new(descriptor, processor, param_map)
49}
50
51pub fn export_gain_as_vst3(gain: f32) -> Result<Vst3ExportedProcessor<Gain>> {
57 Ok(export_processor_as_vst3(
58 vst3_gain_descriptor()?,
59 Gain::new(gain),
60 ))
61}