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, Copy, Debug, Default)]
38pub struct Lv2TransportInfo {
39 pub transport_sample: usize,
40 pub playing: bool,
41 pub bpm: f64,
42 pub tsig_num: u16,
43 pub tsig_denom: u16,
44}
45
46#[derive(Clone, Debug, PartialEq, Eq)]
47pub struct ClapGuiInfo {
48 pub api: String,
49 pub supports_embedded: bool,
50}
51
52#[derive(Clone, Copy, Debug)]
53pub struct ClapParamUpdate {
54 pub param_id: u32,
55 pub value: f64,
56}
57
58#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
59pub struct ClapPluginInfo {
60 #[serde(default)]
61 pub id: String,
62 pub name: String,
63 pub path: String,
64 pub capabilities: Option<ClapPluginCapabilities>,
65}
66
67#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
68pub struct ClapPluginCapabilities {
69 pub has_gui: bool,
70 pub gui_apis: Vec<String>,
71 pub supports_embedded: bool,
72 pub supports_floating: bool,
73 pub has_params: bool,
74 pub has_state: bool,
75 pub audio_inputs: usize,
76 pub audio_outputs: usize,
77 pub midi_inputs: usize,
78 pub midi_outputs: usize,
79}
80
81pub fn is_supported_clap_binary(path: &Path) -> bool {
82 path.extension()
83 .is_some_and(|ext| ext.eq_ignore_ascii_case("clap"))
84}
85
86#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
87pub struct Vst3PluginInfo {
88 pub id: String,
89 pub name: String,
90 pub vendor: String,
91 pub path: String,
92 pub category: String,
93 pub version: String,
94 pub audio_inputs: usize,
95 pub audio_outputs: usize,
96 pub has_midi_input: bool,
97 pub has_midi_output: bool,
98}
99
100#[derive(Clone, Debug, Serialize, Deserialize)]
101pub struct ParameterInfo {
102 pub id: u32,
103 pub title: String,
104 pub short_title: String,
105 pub units: String,
106 pub step_count: i32,
107 pub default_value: f64,
108 pub flags: i32,
109}
110
111#[derive(Clone, Debug, Serialize, Deserialize)]
112pub struct Vst3PluginState {
113 pub plugin_id: String,
114 pub component_state: Vec<u8>,
115 pub controller_state: Vec<u8>,
116}
117
118#[derive(Clone, Debug, PartialEq, Eq)]
119pub struct Vst3GuiInfo {
120 pub has_gui: bool,
121 pub size: Option<(i32, i32)>,
122}
123
124#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
125pub struct Lv2PluginInfo {
126 pub uri: String,
127 pub name: String,
128 pub class_label: String,
129 pub bundle_uri: String,
130 pub required_features: Vec<String>,
131 pub audio_inputs: usize,
132 pub audio_outputs: usize,
133 pub midi_inputs: usize,
134 pub midi_outputs: usize,
135}