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