Skip to main content

maolan_engine/plugins/
types.rs

1use crate::midi::io::MidiEvent;
2use serde::{Deserialize, Serialize};
3use std::path::Path;
4
5#[derive(Clone, Debug, PartialEq)]
6pub struct ClapParameterInfo {
7    pub id: u32,
8    pub name: String,
9    pub module: String,
10    pub min_value: f64,
11    pub max_value: f64,
12    pub default_value: f64,
13}
14
15#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
16pub struct ClapPluginState {
17    pub bytes: Vec<u8>,
18}
19
20#[derive(Clone, Debug, PartialEq, Eq)]
21pub struct ClapMidiOutputEvent {
22    pub port: usize,
23    pub event: MidiEvent,
24}
25
26#[derive(Clone, Copy, Debug, Default)]
27pub struct ClapTransportInfo {
28    pub transport_sample: usize,
29    pub playing: bool,
30    pub loop_enabled: bool,
31    pub loop_range_samples: Option<(usize, usize)>,
32    pub bpm: f64,
33    pub tsig_num: u16,
34    pub tsig_denom: u16,
35}
36
37#[derive(Clone, Debug, PartialEq, Eq)]
38pub struct ClapGuiInfo {
39    pub api: String,
40    pub supports_embedded: bool,
41}
42
43#[derive(Clone, Copy, Debug)]
44pub struct ClapParamUpdate {
45    pub param_id: u32,
46    pub value: f64,
47}
48
49#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
50pub struct ClapPluginInfo {
51    pub name: String,
52    pub path: String,
53    pub capabilities: Option<ClapPluginCapabilities>,
54}
55
56#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
57pub struct ClapPluginCapabilities {
58    pub has_gui: bool,
59    pub gui_apis: Vec<String>,
60    pub supports_embedded: bool,
61    pub supports_floating: bool,
62    pub has_params: bool,
63    pub has_state: bool,
64    pub audio_inputs: usize,
65    pub audio_outputs: usize,
66    pub midi_inputs: usize,
67    pub midi_outputs: usize,
68}
69
70pub fn is_supported_clap_binary(path: &Path) -> bool {
71    path.extension()
72        .is_some_and(|ext| ext.eq_ignore_ascii_case("clap"))
73}
74
75#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
76pub struct Vst3PluginInfo {
77    pub id: String,
78    pub name: String,
79    pub vendor: String,
80    pub path: String,
81    pub category: String,
82    pub version: String,
83    pub audio_inputs: usize,
84    pub audio_outputs: usize,
85    pub has_midi_input: bool,
86    pub has_midi_output: bool,
87}
88
89#[derive(Clone, Debug, Serialize, Deserialize)]
90pub struct ParameterInfo {
91    pub id: u32,
92    pub title: String,
93    pub short_title: String,
94    pub units: String,
95    pub step_count: i32,
96    pub default_value: f64,
97    pub flags: i32,
98}
99
100#[derive(Clone, Debug, Serialize, Deserialize)]
101pub struct Vst3PluginState {
102    pub plugin_id: String,
103    pub component_state: Vec<u8>,
104    pub controller_state: Vec<u8>,
105}
106
107#[derive(Clone, Debug, PartialEq, Eq)]
108pub struct Vst3GuiInfo {
109    pub has_gui: bool,
110    pub size: Option<(i32, i32)>,
111}
112
113#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
114pub struct Lv2PluginInfo {
115    pub uri: String,
116    pub name: String,
117    pub class_label: String,
118    pub bundle_uri: String,
119    pub required_features: Vec<String>,
120    pub audio_inputs: usize,
121    pub audio_outputs: usize,
122    pub midi_inputs: usize,
123    pub midi_outputs: usize,
124}