Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
plugin_descriptor.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2018-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __SCHEMAS_PLUGINS_PLUGIN_DESCRIPTOR_H__
11#define __SCHEMAS_PLUGINS_PLUGIN_DESCRIPTOR_H__
12
13#include "utils/yaml.h"
14
15typedef enum ZPluginCategory_v1
16{
17 ZPLUGIN_CATEGORY_NONE_v1,
18 Z_PLUGIN_CATEGORY_DELAY_v1,
19 Z_PLUGIN_CATEGORY_REVERB_v1,
20 Z_PLUGIN_CATEGORY_DISTORTION_v1,
21 Z_PLUGIN_CATEGORY_WAVESHAPER_v1,
22 Z_PLUGIN_CATEGORY_DYNAMICS_v1,
23 Z_PLUGIN_CATEGORY_AMPLIFIER_v1,
24 Z_PLUGIN_CATEGORY_COMPRESSOR_v1,
25 Z_PLUGIN_CATEGORY_ENVELOPE_v1,
26 Z_PLUGIN_CATEGORY_EXPANDER_v1,
27 Z_PLUGIN_CATEGORY_GATE_v1,
28 Z_PLUGIN_CATEGORY_LIMITER_v1,
29 Z_PLUGIN_CATEGORY_FILTER_v1,
30 Z_PLUGIN_CATEGORY_ALLPASS_FILTER_v1,
31 Z_PLUGIN_CATEGORY_BANDPASS_FILTER_v1,
32 Z_PLUGIN_CATEGORY_COMB_FILTER_v1,
33 Z_PLUGIN_CATEGORY_EQ_v1,
34 Z_PLUGIN_CATEGORY_MULTI_EQ_v1,
35 Z_PLUGIN_CATEGORY_PARA_EQ_v1,
36 Z_PLUGIN_CATEGORY_HIGHPASS_FILTER_v1,
37 Z_PLUGIN_CATEGORY_LOWPASS_FILTER_v1,
38 Z_PLUGIN_CATEGORY_GENERATOR_v1,
39 Z_PLUGIN_CATEGORY_CONSTANT_v1,
40 Z_PLUGIN_CATEGORY_INSTRUMENT_v1,
41 Z_PLUGIN_CATEGORY_OSCILLATOR_v1,
42 Z_PLUGIN_CATEGORY_MIDI_v1,
43 Z_PLUGIN_CATEGORY_MODULATOR_v1,
44 Z_PLUGIN_CATEGORY_CHORUS_v1,
45 Z_PLUGIN_CATEGORY_FLANGER_v1,
46 Z_PLUGIN_CATEGORY_PHASER_v1,
47 Z_PLUGIN_CATEGORY_SIMULATOR_v1,
48 Z_PLUGIN_CATEGORY_SIMULATOR_REVERB_v1,
49 Z_PLUGIN_CATEGORY_SPATIAL_v1,
50 Z_PLUGIN_CATEGORY_SPECTRAL_v1,
51 Z_PLUGIN_CATEGORY_PITCH_v1,
52 Z_PLUGIN_CATEGORY_UTILITY_v1,
53 Z_PLUGIN_CATEGORY_ANALYZER_v1,
54 Z_PLUGIN_CATEGORY_CONVERTER_v1,
55 Z_PLUGIN_CATEGORY_FUNCTION_v1,
56 Z_PLUGIN_CATEGORY_MIXER_v1,
57} ZPluginCategory_v1;
58
59static const cyaml_strval_t plugin_descriptor_category_strings_v1[] = {
60 { "None", ZPLUGIN_CATEGORY_NONE_v1 },
61 { "Delay", Z_PLUGIN_CATEGORY_DELAY_v1 },
62 { "Reverb", Z_PLUGIN_CATEGORY_REVERB_v1 },
63 { "Distortion", Z_PLUGIN_CATEGORY_DISTORTION_v1 },
64 { "Waveshaper", Z_PLUGIN_CATEGORY_WAVESHAPER_v1 },
65 { "Dynamics", Z_PLUGIN_CATEGORY_DYNAMICS_v1 },
66 { "Amplifier", Z_PLUGIN_CATEGORY_AMPLIFIER_v1 },
67 { "Compressor", Z_PLUGIN_CATEGORY_COMPRESSOR_v1 },
68 { "Envelope", Z_PLUGIN_CATEGORY_ENVELOPE_v1 },
69 { "Expander", Z_PLUGIN_CATEGORY_EXPANDER_v1 },
70 { "Gate", Z_PLUGIN_CATEGORY_GATE_v1 },
71 { "Limiter", Z_PLUGIN_CATEGORY_LIMITER_v1 },
72 { "Filter", Z_PLUGIN_CATEGORY_FILTER_v1 },
73 { "Allpass Filter", Z_PLUGIN_CATEGORY_ALLPASS_FILTER_v1 },
74 { "Bandpass Filter", Z_PLUGIN_CATEGORY_BANDPASS_FILTER_v1 },
75 { "Comb Filter", Z_PLUGIN_CATEGORY_COMB_FILTER_v1 },
76 { "EQ", Z_PLUGIN_CATEGORY_EQ_v1 },
77 { "Multi-EQ", Z_PLUGIN_CATEGORY_MULTI_EQ_v1 },
78 { "Parametric EQ", Z_PLUGIN_CATEGORY_PARA_EQ_v1 },
79 { "Highpass Filter", Z_PLUGIN_CATEGORY_HIGHPASS_FILTER_v1 },
80 { "Lowpass Filter", Z_PLUGIN_CATEGORY_LOWPASS_FILTER_v1 },
81 { "Generator", Z_PLUGIN_CATEGORY_GENERATOR_v1 },
82 { "Constant", Z_PLUGIN_CATEGORY_CONSTANT_v1 },
83 { "Instrument", Z_PLUGIN_CATEGORY_INSTRUMENT_v1 },
84 { "Oscillator", Z_PLUGIN_CATEGORY_OSCILLATOR_v1 },
85 { "MIDI", Z_PLUGIN_CATEGORY_MIDI_v1 },
86 { "Modulator", Z_PLUGIN_CATEGORY_MODULATOR_v1 },
87 { "Chorus", Z_PLUGIN_CATEGORY_CHORUS_v1 },
88 { "Flanger", Z_PLUGIN_CATEGORY_FLANGER_v1 },
89 { "Phaser", Z_PLUGIN_CATEGORY_PHASER_v1 },
90 { "Simulator", Z_PLUGIN_CATEGORY_SIMULATOR_v1 },
91 { "Simulator Reverb", Z_PLUGIN_CATEGORY_SIMULATOR_REVERB_v1 },
92 { "Spatial", Z_PLUGIN_CATEGORY_SPATIAL_v1 },
93 { "Spectral", Z_PLUGIN_CATEGORY_SPECTRAL_v1 },
94 { "Pitch", Z_PLUGIN_CATEGORY_PITCH_v1 },
95 { "Utility", Z_PLUGIN_CATEGORY_UTILITY_v1 },
96 { "Analyzer", Z_PLUGIN_CATEGORY_ANALYZER_v1 },
97 { "Converter", Z_PLUGIN_CATEGORY_CONVERTER_v1 },
98 { "Function", Z_PLUGIN_CATEGORY_FUNCTION_v1 },
99 { "Mixer", Z_PLUGIN_CATEGORY_MIXER_v1 },
100};
101
102typedef enum PluginProtocol_v1
103{
104 PROT_DUMMY_v1,
105 PROT_LV2_v1,
106 PROT_DSSI_v1,
107 PROT_LADSPA_v1,
108 PROT_VST_v1,
109 PROT_VST3_v1,
110 PROT_AU_v1,
111 PROT_SFZ_v1,
112 PROT_SF2_v1,
113 PROT_CLAP_v1,
114 PROT_JSFX_v1,
115} PluginProtocol_v1;
116
117static const cyaml_strval_t plugin_protocol_strings_v1[] = {
118 { "Dummy", PROT_DUMMY_v1 },
119 { "LV2", PROT_LV2_v1 },
120 { "DSSI", PROT_DSSI_v1 },
121 { "LADSPA", PROT_LADSPA_v1 },
122 { "VST", PROT_VST_v1 },
123 { "VST3", PROT_VST3_v1 },
124 { "AU", PROT_AU_v1 },
125 { "SFZ", PROT_SFZ_v1 },
126 { "SF2", PROT_SF2_v1 },
127 { "CLAP", PROT_CLAP_v1 },
128 { "JSFX", PROT_JSFX_v1 },
129};
130
131typedef enum PluginArchitecture_v1
132{
133 Z_PLUGIN_ARCHITECTURE_32_v1,
134 Z_PLUGIN_ARCHITECTURE_64_v1,
135} PluginArchitecture_v1;
136
137static const cyaml_strval_t plugin_architecture_strings_v1[] = {
138 { "32-bit", Z_PLUGIN_ARCHITECTURE_32_v1 },
139 { "64-bit", Z_PLUGIN_ARCHITECTURE_64_v1 },
140};
141
142typedef enum ZCarlaBridgeMode_v1
143{
144 Z_CARLA_BRIDGE_NONE_v1,
145 Z_CARLA_BRIDGE_UI_v1,
146 Z_CARLA_BRIDGE_FULL_v1,
147} ZCarlaBridgeMode_v1;
148
149static const cyaml_strval_t carla_bridge_mode_strings_v1[] = {
150 { "None", Z_CARLA_BRIDGE_NONE_v1 },
151 { "UI", Z_CARLA_BRIDGE_UI_v1 },
152 { "Full", Z_CARLA_BRIDGE_FULL_v1 },
153};
154
155/***
156 * A descriptor to be implemented by all plugins
157 * This will be used throughout the UI
158 */
160{
161 int schema_version;
162 char * author;
163 char * name;
164 char * website;
165 ZPluginCategory_v1 category;
166 char * category_str;
167 int num_audio_ins;
168 int num_midi_ins;
169 int num_audio_outs;
170 int num_midi_outs;
171 int num_ctrl_ins;
172 int num_ctrl_outs;
173 int num_cv_ins;
174 int num_cv_outs;
175 PluginArchitecture_v1 arch;
176 PluginProtocol_v1 protocol;
177 char * path;
178 char * uri;
179 int64_t unique_id;
180 ZCarlaBridgeMode_v1 min_bridge_mode;
181 bool has_custom_ui;
182 unsigned int ghash;
184
185static const cyaml_schema_field_t plugin_descriptor_fields_schema_v1[] = {
186 YAML_FIELD_INT (PluginDescriptor_v1, schema_version),
187 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, author),
188 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, name),
189 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, website),
190 YAML_FIELD_ENUM (
192 category,
193 plugin_descriptor_category_strings_v1),
194 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, category_str),
195 YAML_FIELD_INT (PluginDescriptor_v1, num_audio_ins),
196 YAML_FIELD_INT (PluginDescriptor_v1, num_audio_outs),
197 YAML_FIELD_INT (PluginDescriptor_v1, num_midi_ins),
198 YAML_FIELD_INT (PluginDescriptor_v1, num_midi_outs),
199 YAML_FIELD_INT (PluginDescriptor_v1, num_ctrl_ins),
200 YAML_FIELD_INT (PluginDescriptor_v1, num_ctrl_outs),
201 YAML_FIELD_INT (PluginDescriptor_v1, num_cv_ins),
202 YAML_FIELD_INT (PluginDescriptor_v1, num_cv_outs),
203 YAML_FIELD_UINT (PluginDescriptor_v1, unique_id),
204 YAML_FIELD_ENUM (PluginDescriptor_v1, arch, plugin_architecture_strings_v1),
205 YAML_FIELD_ENUM (PluginDescriptor_v1, protocol, plugin_protocol_strings_v1),
206 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, path),
207 YAML_FIELD_STRING_PTR_OPTIONAL (PluginDescriptor_v1, uri),
208 YAML_FIELD_ENUM (
210 min_bridge_mode,
211 carla_bridge_mode_strings_v1),
212 YAML_FIELD_INT (PluginDescriptor_v1, has_custom_ui),
213 YAML_FIELD_UINT (PluginDescriptor_v1, ghash),
214
215 CYAML_FIELD_END
216};
217
218static const cyaml_schema_value_t plugin_descriptor_schema_v1 = {
219 YAML_VALUE_PTR (PluginDescriptor_v1, plugin_descriptor_fields_schema_v1),
220};
221
222#endif
YAML utils.