use sim_kernel::Result;
use sim_lib_audio_dsp::Gain;
use sim_lib_audio_graph_core::{PrepareConfig, ProcessBlock, Processor};
use sim_lib_plugin_core::{PluginDescriptor, PluginInstance, PluginState, ProcessorPlugin};
use crate::{Vst3ParamMap, vst3_gain_descriptor};
#[derive(Clone, Debug)]
pub struct Vst3ExportedProcessor<P> {
inner: ProcessorPlugin<P>,
param_map: Vst3ParamMap,
}
impl<P> Vst3ExportedProcessor<P> {
pub fn new(descriptor: PluginDescriptor, processor: P, param_map: Vst3ParamMap) -> Self {
Self {
inner: ProcessorPlugin::new(descriptor, processor),
param_map,
}
}
pub fn param_map(&self) -> &Vst3ParamMap {
&self.param_map
}
}
sim_lib_plugin_core::forward_plugin_instance!(Vst3ExportedProcessor);
pub fn export_processor_as_vst3<P: Processor>(
descriptor: PluginDescriptor,
processor: P,
) -> Vst3ExportedProcessor<P> {
let param_map = Vst3ParamMap::identity(descriptor.parameters.iter().map(|param| param.id));
Vst3ExportedProcessor::new(descriptor, processor, param_map)
}
pub fn export_gain_as_vst3(gain: f32) -> Result<Vst3ExportedProcessor<Gain>> {
Ok(export_processor_as_vst3(
vst3_gain_descriptor()?,
Gain::new(gain),
))
}