1 /* Calf DSP Library
2  * Audio module (plugin) metadata - header file
3  *
4  * Copyright (C) 2007-2008 Krzysztof Foltman
5  * Copyright (C) 2008 Thor Harald Johansen <thj@thj.no>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General
18  * Public License along with this program; if not, write to the
19  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02111-1307, USA.
21  */
22 
23 #ifndef __CALF_METADATA_H
24 #define __CALF_METADATA_H
25 
26 #include "giface.h"
27 
28 #define MONO_VU_METER_PARAMS param_meter_in, param_meter_out, param_clip_in, param_clip_out
29 #define STEREO_VU_METER_PARAMS param_meter_inL, param_meter_inR, param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR
30 #define PERIODICAL_PARAMS param_timing, param_bpm, param_ms, param_hz, param_bpm_host
31 
32 namespace calf_plugins {
33 
34 struct flanger_metadata: public plugin_metadata<flanger_metadata>
35 {
36 public:
37     enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, par_dryamount,
38         param_on, param_level_in, param_level_out,
39         STEREO_VU_METER_PARAMS, param_lfo,
40         param_count };
41     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
42     PLUGIN_NAME_ID_LABEL("flanger", "flanger", "Flanger")
43 };
44 
45 struct phaser_metadata: public plugin_metadata<phaser_metadata>
46 {
47     enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, par_dryamount,
48         param_on, param_level_in, param_level_out,
49         STEREO_VU_METER_PARAMS, param_lfo,
50         param_count };
51     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
52     PLUGIN_NAME_ID_LABEL("phaser", "phaser", "Phaser")
53 };
54 
55 struct filter_metadata: public plugin_metadata<filter_metadata>
56 {
57     enum { par_cutoff, par_resonance, par_mode, par_inertia,
58         param_bypass, param_level_in, param_level_out,
59         STEREO_VU_METER_PARAMS,
60         param_count };
61     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = false, support_midi = false, require_instance_access = false };
62     PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter")
63     /// do not export mode and inertia as CVs, as those are settings and not parameters
is_cvfilter_metadata64     bool is_cv(int param_no) const { return param_no != par_mode && param_no != par_inertia; }
65 };
66 
67 /// Filterclavier - metadata
68 struct filterclavier_metadata: public plugin_metadata<filterclavier_metadata>
69 {
70     enum { par_transpose, par_detune, par_max_resonance, par_mode, par_inertia,
71         param_bypass, param_level_in, param_level_out,
72         STEREO_VU_METER_PARAMS,
73         param_count };
74     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = true, support_midi = true, require_instance_access = false };
75     PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier")
76     /// do not export mode and inertia as CVs, as those are settings and not parameters
is_cvfilterclavier_metadata77     bool is_cv(int param_no) const { return param_no != par_mode && param_no != par_inertia; }
78 };
79 
80 /// Envelope Filter - metadata
81 struct envelopefilter_metadata: public plugin_metadata<envelopefilter_metadata>
82 {
83     enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
84     enum { param_bypass, param_level_in, param_level_out,
85            STEREO_VU_METER_PARAMS,
86            param_mix, param_q, param_mode,
87            param_attack, param_release,
88            param_upper, param_lower, param_gain,
89            param_sidechain, param_response,
90            param_count };
91     PLUGIN_NAME_ID_LABEL("envelopefilter", "envelopefilter", "Envelope Filter")
92 };
93 
94 struct reverb_metadata: public plugin_metadata<reverb_metadata>
95 {
96     enum { param_meter_inL, param_meter_inR, param_clip_outL,
97            par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, par_on,
98            param_level_in, param_level_out,
99            param_meter_outL, param_meter_outR, param_clip_inL, param_clip_inR, param_clip_outR,
100            param_count };
101     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
102     PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb")
103 };
104 
105 struct vintage_delay_metadata: public plugin_metadata<vintage_delay_metadata>
106 {
107     enum {  param_on, param_level_in, param_level_out,
108             STEREO_VU_METER_PARAMS,
109             par_divide, par_time_l, par_time_r, par_feedback,
110             par_amount, par_mixmode, par_medium, par_dryamount,
111             par_width, par_frag, par_pbeats, par_pfrag,
112             PERIODICAL_PARAMS,
113             param_count };
114     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false, require_instance_access = false };
115     PLUGIN_NAME_ID_LABEL("vintagedelay", "vintagedelay", "Vintage Delay")
116 };
117 
118 struct comp_delay_metadata: public plugin_metadata<comp_delay_metadata>
119 {
120     enum { par_distance_mm, par_distance_cm, par_distance_m, par_dry, par_wet, param_temp,
121         param_bypass, param_level_in, param_level_out,
122         STEREO_VU_METER_PARAMS, param_count };
123     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, rt_capable = true, support_midi = false, require_midi = false, require_instance_access = false };
124     PLUGIN_NAME_ID_LABEL("compdelay", "compdelay", "Compensation Delay Line")
125 };
126 
127 struct haas_enhancer_metadata: public plugin_metadata<haas_enhancer_metadata>
128 {
129     enum {
130         param_bypass, param_level_in, param_level_out,
131         par_s_gain,
132         STEREO_VU_METER_PARAMS,
133         param_meter_sideL, param_meter_sideR,
134         par_m_source, par_m_phase,
135         par_s_delay0, par_s_balance0, par_s_gain0, par_s_phase0,
136         par_s_delay1, par_s_balance1, par_s_gain1, par_s_phase1,
137         param_count
138     };
139     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false, require_instance_access = false };
140     PLUGIN_NAME_ID_LABEL("haasenhancer", "haasenhancer", "Haas Stereo Enhancer")
141 };
142 
143 struct reverse_delay_metadata: public plugin_metadata<reverse_delay_metadata>
144 {
145     enum { par_bpm, par_bpm_host, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_width, par_sync, par_sync_led_l, par_sync_led_r, par_reset, par_window,
146         param_bypass, param_level_in, param_level_out,
147         STEREO_VU_METER_PARAMS,
148         param_count };
149     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false, require_instance_access = false };
150     PLUGIN_NAME_ID_LABEL("reversedelay", "reversedelay", "Reverse Delay")
151 };
152 
153 struct rotary_speaker_metadata: public plugin_metadata<rotary_speaker_metadata>
154 {
155 public:
156     enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, par_am_depth, par_test, par_meter_l, par_meter_h,
157         param_bypass, param_level_in, param_level_out,
158         STEREO_VU_METER_PARAMS,
159         param_count };
160     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = false, rt_capable = true, require_instance_access = false };
161     PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker")
162 };
163 
164 /// A multitap stereo chorus thing - metadata
165 struct multichorus_metadata: public plugin_metadata<multichorus_metadata>
166 {
167 public:
168     enum { par_delay, par_depth, par_rate, par_stereo, par_voices, par_vphase, par_amount, par_dryamount, par_freq, par_freq2, par_q, par_overlap,
169         param_on, param_level_in, param_level_out,
170         STEREO_VU_METER_PARAMS, param_lfo,
171         param_count };
172     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false, require_instance_access = false };
173     PLUGIN_NAME_ID_LABEL("multichorus", "multichorus", "Multi Chorus")
174 };
175 
176 enum CalfEqMode {
177     MODE12DB,
178     MODE24DB,
179     MODE36DB
180 };
181 
182 /// Monosynth - metadata
183 struct monosynth_metadata: public plugin_metadata<monosynth_metadata>
184 {
185     enum { wave_saw, wave_sqr, wave_pulse, wave_sine, wave_triangle, wave_varistep, wave_skewsaw, wave_skewsqr, wave_test1, wave_test2, wave_test3, wave_test4, wave_test5, wave_test6, wave_test7, wave_test8, wave_count };
186     enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 };
187     enum { par_wave1, par_wave2, par_pw1, par_pw2, par_detune, par_osc2xpose, par_oscmode, par_oscmix, par_filtertype, par_cutoff, par_resonance, par_cutoffsep, par_env1tocutoff, par_env1tores, par_env1toamp,
188         par_env1attack, par_env1decay, par_env1sustain, par_env1fade, par_env1release,
189         par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange,
190         par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo, par_scaledetune,
191         par_env2tocutoff, par_env2tores, par_env2toamp,
192         par_env2attack, par_env2decay, par_env2sustain, par_env2fade, par_env2release,
193         par_stretch1, par_window1,
194         par_lfo1trig, par_lfo2trig,
195         par_lfo2rate, par_lfo2delay,
196         par_o2unison, par_o2unisonfrq,
197         par_osc1xpose,
198         par_midi,
199         param_count };
200     enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true, require_instance_access = false };
201     enum { step_size = 64, step_shift = 6 };
202     enum { mod_matrix_slots = 10 };
203     enum {
204         modsrc_none,
205         modsrc_velocity,
206         modsrc_pressure,
207         modsrc_modwheel,
208         modsrc_env1,
209         modsrc_env2,
210         modsrc_lfo1,
211         modsrc_lfo2,
212         modsrc_count,
213     };
214     enum {
215         moddest_none,
216         moddest_attenuation,
217         moddest_oscmix,
218         moddest_cutoff,
219         moddest_resonance,
220         moddest_o1detune,
221         moddest_o2detune,
222         moddest_o1pw,
223         moddest_o2pw,
224         moddest_o1stretch,
225         moddest_o2unisonamp,
226         moddest_o2unisondetune,
227         moddest_count,
228     };
229     PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth")
230 
231     mod_matrix_metadata mm_metadata;
232 
233     monosynth_metadata();
234     /// Lookup of table edit interface
get_table_metadata_ifacemonosynth_metadata235     virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; }
236     void get_configure_vars(std::vector<std::string> &names) const;
237 };
238 
239 /// Thor's compressor - metadata
240 /// Added some meters and stripped the weighting part
241 struct compressor_metadata: public plugin_metadata<compressor_metadata>
242 {
243     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
244     enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
245            param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, param_mix,
246            param_count };
247     PLUGIN_NAME_ID_LABEL("compressor", "compressor", "Compressor")
248 };
249 
250 /// Damien's compressor - metadata
251 /// Added some meters and stripped the weighting part
252 struct monocompressor_metadata: public plugin_metadata<monocompressor_metadata>
253 {
254     enum { in_count = 1, out_count = 1, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
255     enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
256            param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_compression, param_mix,
257            param_count };
258     PLUGIN_NAME_ID_LABEL("monocompressor", "monocompressor", "Mono Compressor")
259 };
260 
261 /// Markus's sidechain compressor - metadata
262 struct sidechaincompressor_metadata: public plugin_metadata<sidechaincompressor_metadata>
263 {
264     enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
265     enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
266            param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression,
267            param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level,
268            param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_mix, param_count };
269     PLUGIN_NAME_ID_LABEL("sidechaincompressor", "sidechaincompressor", "Sidechain Compressor")
270 };
271 
272 /// Markus's multibandcompressor - metadata
273 struct multibandcompressor_metadata: public plugin_metadata<multibandcompressor_metadata>
274 {
275     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
276     enum { param_bypass, param_level_in, param_level_out,
277            STEREO_VU_METER_PARAMS,
278            param_freq0, param_freq1, param_freq2,
279            param_mode,
280            param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0,
281            param_detection0, param_compression0, param_output0, param_bypass0, param_solo0,
282            param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1,
283            param_detection1, param_compression1, param_output1, param_bypass1, param_solo1,
284            param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2,
285            param_detection2, param_compression2, param_output2, param_bypass2, param_solo2,
286            param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3,
287            param_detection3, param_compression3, param_output3, param_bypass3, param_solo3,
288            param_notebook,
289            param_count };
290     PLUGIN_NAME_ID_LABEL("multibandcompressor", "multibandcompressor", "Multiband Compressor")
291 };
292 
293 /// Markus's deesser - metadata
294 struct deesser_metadata: public plugin_metadata<deesser_metadata>
295 {
296     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
297     enum { param_bypass, param_detected, param_compression, param_detected_led, param_clip_out,
298            param_detection, param_mode,
299            param_threshold, param_ratio, param_laxity, param_makeup,
300            param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_f2_q,
301            param_sc_listen, param_count };
302     PLUGIN_NAME_ID_LABEL("deesser", "deesser", "Deesser")
303 };
304 
305 /// Damiens' Gate - metadata
306 /// Added some meters and stripped the weighting part
307 struct gate_metadata: public plugin_metadata<gate_metadata>
308 {
309     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
310     enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
311            param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating,
312            param_count };
313     PLUGIN_NAME_ID_LABEL("gate", "gate", "Gate")
314 };
315 
316 /// Markus's sidechain gate - metadata
317 struct sidechaingate_metadata: public plugin_metadata<sidechaingate_metadata>
318 {
319     enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
320     enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
321            param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating,
322            param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level,
323            param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count };
324     PLUGIN_NAME_ID_LABEL("sidechaingate", "sidechaingate", "Sidechain Gate")
325 };
326 
327 /// Markus's multiband gate - metadata
328 struct multibandgate_metadata: public plugin_metadata<multibandgate_metadata>
329 {
330     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
331     enum { param_bypass, param_level_in, param_level_out,
332            STEREO_VU_METER_PARAMS,
333            param_freq0, param_freq1, param_freq2,
334            param_mode,
335            param_range0, param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0,
336            param_detection0, param_gating0, param_output0, param_bypass0, param_solo0,
337            param_range1, param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1,
338            param_detection1, param_gating1, param_output1, param_bypass1, param_solo1,
339            param_range2, param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2,
340            param_detection2, param_gating2, param_output2, param_bypass2, param_solo2,
341            param_range3, param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3,
342            param_detection3, param_gating3, param_output3, param_bypass3, param_solo3,
343            param_notebook,
344            param_count };
345     PLUGIN_NAME_ID_LABEL("multibandgate", "multibandgate", "Multiband Gate")
346 };
347 
348 /// Markus's limiter - metadata
349 struct limiter_metadata: public plugin_metadata<limiter_metadata>
350 {
351     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
352     enum { param_bypass, param_level_in, param_level_out,
353            STEREO_VU_METER_PARAMS,
354            param_limit, param_attack, param_release,
355            param_att,
356            param_asc, param_asc_led, param_asc_coeff,
357            param_oversampling,
358            param_auto_level,
359            param_count };
360     PLUGIN_NAME_ID_LABEL("limiter", "limiter", "Limiter")
361 };
362 
363 /// Markus's and Chrischis multibandlimiter - metadata
364 struct multibandlimiter_metadata: public plugin_metadata<multibandlimiter_metadata>
365 {
366     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
367     enum { param_bypass, param_level_in, param_level_out,
368            STEREO_VU_METER_PARAMS,
369            param_freq0, param_freq1, param_freq2,
370            param_mode,
371            param_limit, param_attack, param_release, param_minrel,
372            param_att0, param_att1, param_att2, param_att3,
373            param_weight0, param_weight1, param_weight2, param_weight3,
374            param_release0, param_release1, param_release2, param_release3,
375            param_solo0, param_solo1, param_solo2, param_solo3,
376            param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3,
377            param_asc, param_asc_led, param_asc_coeff,
378            param_oversampling,
379            param_auto_level,
380            param_count };
381     PLUGIN_NAME_ID_LABEL("multibandlimiter", "multibandlimiter", "Multiband Limiter")
382 };
383 
384 /// Markus's and Chrischis sidechainlimiter - metadata
385 struct sidechainlimiter_metadata: public plugin_metadata<sidechainlimiter_metadata>
386 {
387     enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
388     enum { param_bypass, param_level_in, param_level_out,
389            STEREO_VU_METER_PARAMS,
390            param_meter_scL, param_meter_scR,
391            param_freq0, param_freq1, param_freq2,
392            param_mode,
393            param_limit, param_attack, param_release, param_minrel,
394            param_att0, param_att1, param_att2, param_att3, param_att_sc,
395            param_weight0, param_weight1, param_weight2, param_weight3, param_weight_sc,
396            param_release0, param_release1, param_release2, param_release3, param_release_sc,
397            param_solo0, param_solo1, param_solo2, param_solo3, param_solo_sc,
398            param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3, param_effrelease_sc,
399            param_asc, param_asc_led, param_asc_coeff,
400            param_oversampling, param_level_sc,
401            param_auto_level,
402            param_count };
403     PLUGIN_NAME_ID_LABEL("sidechainlimiter", "sidechainlimiter", "Sidechain Limiter")
404 };
405 
406 /// Damien's RIAA and CD Emphasis - metadata
407 struct emphasis_metadata: public plugin_metadata<emphasis_metadata>
408 {
409     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
410     enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_mode, param_type,
411            param_count };
412     PLUGIN_NAME_ID_LABEL("emphasis", "emphasis", "Emphasis")
413 };
414 
415 /// Markus's 5-band EQ - metadata
416 struct equalizer5band_metadata: public plugin_metadata<equalizer5band_metadata>
417 {
418     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
419     enum { param_bypass, param_level_in, param_level_out,
420            STEREO_VU_METER_PARAMS,
421            param_ls_active, param_ls_level, param_ls_freq, param_ls_q,
422            param_hs_active, param_hs_level, param_hs_freq, param_hs_q,
423            param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
424            param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
425            param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
426            param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
427            param_count };
428     // dummy parameter numbers, shouldn't be used EVER, they're only there to avoid pushing LP/HP filters to a separate class
429     // and potentially making inlining and optimization harder for the compiler
430     enum { param_lp_active = 0xDEADBEEF, param_hp_active, param_hp_mode, param_lp_mode, param_hp_freq, param_lp_freq, param_hp_q, param_lp_q };
431     enum { PeakBands = 3, first_graph_param = param_ls_active, last_graph_param = param_p3_q };
432     PLUGIN_NAME_ID_LABEL("equalizer5band", "eq5", "Equalizer 5 Band")
433 };
434 
435 /// Markus's 8-band EQ - metadata
436 struct equalizer8band_metadata: public plugin_metadata<equalizer8band_metadata>
437 {
438     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
439     enum { param_bypass, param_level_in, param_level_out,
440            STEREO_VU_METER_PARAMS,
441            param_hp_active, param_hp_freq, param_hp_mode, param_hp_q,
442            param_lp_active, param_lp_freq, param_lp_mode, param_lp_q,
443            param_ls_active, param_ls_level, param_ls_freq, param_ls_q,
444            param_hs_active, param_hs_level, param_hs_freq, param_hs_q,
445            param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
446            param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
447            param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
448            param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
449            param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
450            param_count };
451     enum { PeakBands = 4, first_graph_param = param_hp_active, last_graph_param = param_p4_q };
452     PLUGIN_NAME_ID_LABEL("equalizer8band", "eq8", "Equalizer 8 Band")
453 };
454 /// Markus's 12-band EQ - metadata
455 struct equalizer12band_metadata: public plugin_metadata<equalizer12band_metadata>
456 {
457     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
458     enum { param_bypass, param_level_in, param_level_out,
459            STEREO_VU_METER_PARAMS,
460            param_hp_active, param_hp_freq, param_hp_mode, param_hp_q,
461            param_lp_active, param_lp_freq, param_lp_mode, param_lp_q,
462            param_ls_active, param_ls_level, param_ls_freq, param_ls_q,
463            param_hs_active, param_hs_level, param_hs_freq, param_hs_q,
464            param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
465            param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
466            param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
467            param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
468            param_p5_active, param_p5_level, param_p5_freq, param_p5_q,
469            param_p6_active, param_p6_level, param_p6_freq, param_p6_q,
470            param_p7_active, param_p7_level, param_p7_freq, param_p7_q,
471            param_p8_active, param_p8_level, param_p8_freq, param_p8_q,
472            param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
473            param_count };
474     enum { PeakBands = 8, first_graph_param = param_hp_active, last_graph_param = param_p8_q };
475     PLUGIN_NAME_ID_LABEL("equalizer12band", "eq12", "Equalizer 12 Band")
476 };
477 /// 30-band EQ - metadata
478 struct equalizer30band_metadata: public plugin_metadata<equalizer30band_metadata>
479 {
480     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
481     enum {
482             param_level_in, param_level_in_vuL, param_level_in_vuR, param_level_in_clipL, param_level_in_clipR,
483             param_bypass, param_filters,
484             param_gainscale1, param_gainscale2,
485             param_level_out, param_level_out_vuL, param_level_out_vuR, param_level_out_clipL, param_level_out_clipR,
486 
487             //1 - 30 Bands
488             param_gain10,  param_gain_scale10,
489             param_gain11,  param_gain_scale11,
490             param_gain12,  param_gain_scale12,
491             param_gain13,  param_gain_scale13,
492             param_gain14,  param_gain_scale14,
493             param_gain15,  param_gain_scale15,
494             param_gain16,  param_gain_scale16,
495             param_gain17,  param_gain_scale17,
496             param_gain18,  param_gain_scale18,
497             param_gain19,  param_gain_scale19,
498             param_gain110, param_gain_scale110,
499             param_gain111, param_gain_scale111,
500             param_gain112, param_gain_scale112,
501             param_gain113, param_gain_scale113,
502             param_gain114, param_gain_scale114,
503             param_gain115, param_gain_scale115,
504             param_gain116, param_gain_scale116,
505             param_gain117, param_gain_scale117,
506             param_gain118, param_gain_scale118,
507             param_gain119, param_gain_scale119,
508             param_gain120, param_gain_scale120,
509             param_gain121, param_gain_scale121,
510             param_gain122, param_gain_scale122,
511             param_gain123, param_gain_scale123,
512             param_gain124, param_gain_scale124,
513             param_gain125, param_gain_scale125,
514             param_gain126, param_gain_scale126,
515             param_gain127, param_gain_scale127,
516             param_gain128, param_gain_scale128,
517             param_gain129, param_gain_scale129,
518             param_gain130, param_gain_scale130,
519 
520             //2 - 30 Bands
521             param_gain20,  param_gain_scale20,
522             param_gain21,  param_gain_scale21,
523             param_gain22,  param_gain_scale22,
524             param_gain23,  param_gain_scale23,
525             param_gain24,  param_gain_scale24,
526             param_gain25,  param_gain_scale25,
527             param_gain26,  param_gain_scale26,
528             param_gain27,  param_gain_scale27,
529             param_gain28,  param_gain_scale28,
530             param_gain29,  param_gain_scale29,
531             param_gain210, param_gain_scale210,
532             param_gain211, param_gain_scale211,
533             param_gain212, param_gain_scale212,
534             param_gain213, param_gain_scale213,
535             param_gain214, param_gain_scale214,
536             param_gain215, param_gain_scale215,
537             param_gain216, param_gain_scale216,
538             param_gain217, param_gain_scale217,
539             param_gain218, param_gain_scale218,
540             param_gain219, param_gain_scale219,
541             param_gain220, param_gain_scale220,
542             param_gain221, param_gain_scale221,
543             param_gain222, param_gain_scale222,
544             param_gain223, param_gain_scale223,
545             param_gain224, param_gain_scale224,
546             param_gain225, param_gain_scale225,
547             param_gain226, param_gain_scale226,
548             param_gain227, param_gain_scale227,
549             param_gain228, param_gain_scale228,
550             param_gain229, param_gain_scale229,
551             param_gain230, param_gain_scale230,
552 
553             param_l_active, param_r_active, param_linked,
554 
555            param_count };
556     enum { band_params = 2 };
557     enum { gain_step = 6 };
558 
559     PLUGIN_NAME_ID_LABEL("equalizer30band", "eq30", "Equalizer 30 Band")
560 };
561 /// Markus's X-Overs
562 struct xover2_metadata: public plugin_metadata<xover2_metadata>
563 {
564     enum { in_count = 2, out_count = 4, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
565     enum { param_level, param_meter_0, param_meter_1, param_mode,
566            param_freq0,
567            param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
568            param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
569            param_count };
570     enum { channels = 2, bands = 2 };
571     PLUGIN_NAME_ID_LABEL("xover2band", "xover2", "X-Over 2 Band")
572 };
573 struct xover3_metadata: public plugin_metadata<xover3_metadata>
574 {
575     enum { in_count = 2, out_count = 6, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
576     enum { param_level, param_meter_0, param_meter_1, param_mode,
577            param_freq0, param_freq1,
578            param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
579            param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
580            param_level3, param_active3, param_phase3, param_delay3, param_meter_03, param_meter_13,
581            param_count };
582     enum { channels = 2, bands = 3 };
583     PLUGIN_NAME_ID_LABEL("xover3band", "xover3", "X-Over 3 Band")
584 };
585 struct xover4_metadata: public plugin_metadata<xover4_metadata>
586 {
587     enum { in_count = 2, out_count = 8, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
588     enum { param_level, param_meter_0, param_meter_1, param_mode,
589            param_freq0, param_freq1, param_freq2,
590            param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
591            param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
592            param_level3, param_active3, param_phase3, param_delay3, param_meter_03, param_meter_13,
593            param_level4, param_active4, param_phase4, param_delay4, param_meter_04, param_meter_14,
594            param_count };
595     enum { channels = 2, bands = 4 };
596     PLUGIN_NAME_ID_LABEL("xover4band", "xover4", "X-Over 4 Band")
597 };
598 
599 /// Markus and Chrischis Vocoder - metadata
600 struct vocoder_metadata: public plugin_metadata<vocoder_metadata>
601 {
602     enum { in_count = 4, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
603     enum { param_bypass, param_link, param_detectors,
604            param_carrier_in, param_carrier_inL, param_carrier_inR, param_carrier_clip_inL, param_carrier_clip_inR,
605            param_mod_in, param_mod_inL, param_mod_inR, param_mod_clip_inL, param_mod_clip_inR,
606            param_out, param_outL, param_outR, param_clip_outL, param_clip_outR,
607            param_carrier, param_mod, param_proc, param_order, param_bands, param_hiq,
608            param_attack, param_release, param_analyzer,
609            param_volume0, param_pan0, param_noise0, param_mod0, param_solo0, param_level0, param_q0,
610            param_volume1, param_pan1, param_noise1, param_mod1, param_solo1, param_level1, param_q1,
611            param_volume2, param_pan2, param_noise2, param_mod2, param_solo2, param_level2, param_q2,
612            param_volume3, param_pan3, param_noise3, param_mod3, param_solo3, param_level3, param_q3,
613            param_volume4, param_pan4, param_noise4, param_mod4, param_solo4, param_level4, param_q4,
614            param_volume5, param_pan5, param_noise5, param_mod5, param_solo5, param_level5, param_q5,
615            param_volume6, param_pan6, param_noise6, param_mod6, param_solo6, param_level6, param_q6,
616            param_volume7, param_pan7, param_noise7, param_mod7, param_solo7, param_level7, param_q7,
617            param_volume8, param_pan8, param_noise8, param_mod8, param_solo8, param_level8, param_q8,
618            param_volume9, param_pan9, param_noise9, param_mod9, param_solo9, param_level9, param_q9,
619            param_volume10, param_pan10, param_noise10, param_mod10, param_solo10, param_level10, param_q10,
620            param_volume11, param_pan11, param_noise11, param_mod11, param_solo11, param_level11, param_q11,
621            param_volume12, param_pan12, param_noise12, param_mod12, param_solo12, param_level12, param_q12,
622            param_volume13, param_pan13, param_noise13, param_mod13, param_solo13, param_level13, param_q13,
623            param_volume14, param_pan14, param_noise14, param_mod14, param_solo14, param_level14, param_q14,
624            param_volume15, param_pan15, param_noise15, param_mod15, param_solo15, param_level15, param_q15,
625            param_volume16, param_pan16, param_noise16, param_mod16, param_solo16, param_level16, param_q16,
626            param_volume17, param_pan17, param_noise17, param_mod17, param_solo17, param_level17, param_q17,
627            param_volume18, param_pan18, param_noise18, param_mod18, param_solo18, param_level18, param_q18,
628            param_volume19, param_pan19, param_noise19, param_mod19, param_solo19, param_level19, param_q19,
629            param_volume20, param_pan20, param_noise20, param_mod20, param_solo20, param_level20, param_q20,
630            param_volume21, param_pan21, param_noise21, param_mod21, param_solo21, param_level21, param_q21,
631            param_volume22, param_pan22, param_noise22, param_mod22, param_solo22, param_level22, param_q22,
632            param_volume23, param_pan23, param_noise23, param_mod23, param_solo23, param_level23, param_q23,
633            param_volume24, param_pan24, param_noise24, param_mod24, param_solo24, param_level24, param_q24,
634            param_volume25, param_pan25, param_noise25, param_mod25, param_solo25, param_level25, param_q25,
635            param_volume26, param_pan26, param_noise26, param_mod26, param_solo26, param_level26, param_q26,
636            param_volume27, param_pan27, param_noise27, param_mod27, param_solo27, param_level27, param_q27,
637            param_volume28, param_pan28, param_noise28, param_mod28, param_solo28, param_level28, param_q28,
638            param_volume29, param_pan29, param_noise29, param_mod29, param_solo29, param_level29, param_q29,
639            param_volume30, param_pan30, param_noise30, param_mod30, param_solo30, param_level30, param_q30,
640            param_volume31, param_pan31, param_noise31, param_mod31, param_solo31, param_level31, param_q31,
641            param_lower, param_upper, param_tilt,
642            param_count };
643     enum { band_params = 7 };
644     PLUGIN_NAME_ID_LABEL("vocoder", "vocoder", "Vocoder")
645 };
646 
647 /// Markus's Pulsator - metadata
648 struct pulsator_metadata: public plugin_metadata<pulsator_metadata>
649 {
650     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
651     enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS,
652            param_mode, param_amount, param_offset_l, param_offset_r,
653            param_mono, param_reset, param_pwidth,
654            PERIODICAL_PARAMS,
655            param_count };
656     PLUGIN_NAME_ID_LABEL("pulsator", "pulsator", "Pulsator")
657 };
658 
659 /// Markus's Ring Modulator - metadata
660 struct ringmodulator_metadata: public plugin_metadata<ringmodulator_metadata>
661 {
662     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
663     enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS,
664            param_mod_mode, param_mod_freq, param_mod_amount, param_mod_phase, param_mod_detune, param_mod_listen,
665 
666            param_lfo1_mode, param_lfo1_freq, param_lfo1_reset,
667            param_lfo1_mod_freq_lo, param_lfo1_mod_freq_hi, param_lfo1_mod_freq_active,
668            param_lfo1_mod_detune_lo, param_lfo1_mod_detune_hi, param_lfo1_mod_detune_active,
669            param_lfo1_activity,
670 
671            param_lfo2_mode, param_lfo2_freq, param_lfo2_reset,
672            param_lfo2_lfo1_freq_lo, param_lfo2_lfo1_freq_hi, param_lfo2_lfo1_freq_active,
673            param_lfo2_mod_amount_lo, param_lfo2_mod_amount_hi, param_lfo2_mod_amount_active,
674            param_lfo2_activity,
675 
676            param_count };
677     PLUGIN_NAME_ID_LABEL("ringmodulator", "ringmodulator", "Ring Modulator")
678 };
679 
680 /// Markus's Saturator - metadata
681 struct saturator_metadata: public plugin_metadata<saturator_metadata>
682 {
683     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
684     enum { param_bypass, param_level_in, param_level_out,
685            STEREO_VU_METER_PARAMS,
686            param_mix, param_drive, param_blend,
687            param_lp_pre_freq, param_hp_pre_freq, param_lp_post_freq, param_hp_post_freq,
688            param_p_freq, param_p_level, param_p_q, param_pre, param_post, param_count };
689     PLUGIN_NAME_ID_LABEL("saturator", "saturator", "Saturator")
690 };
691 /// Markus's Exciter - metadata
692 struct exciter_metadata: public plugin_metadata<exciter_metadata>
693 {
694     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
695     enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive,
696            param_freq, param_listen, param_ceil_active, param_ceil, param_count };
697     PLUGIN_NAME_ID_LABEL("exciter", "exciter", "Exciter")
698 };
699 /// Markus's Bass Enhancer - metadata
700 struct bassenhancer_metadata: public plugin_metadata<bassenhancer_metadata>
701 {
702     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
703     enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive,
704            param_freq, param_listen, param_floor_active, param_floor, param_count };
705     PLUGIN_NAME_ID_LABEL("bassenhancer", "bassenhancer", "Bass Enhancer")
706 };
707 /// Markus's and Chrischi's Crusher Module - metadata
708 struct crusher_metadata: public plugin_metadata<crusher_metadata>
709 {
710     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
711     enum { param_bypass, param_level_in, param_level_out,
712            STEREO_VU_METER_PARAMS,
713            param_bits, param_morph, param_mode, param_dc, param_aa,
714            param_samples, param_lfo, param_lforange, param_lforate,
715            param_count };
716     PLUGIN_NAME_ID_LABEL("crusher", "crusher", "Crusher")
717 };
718 /// Markus's Stereo Module - metadata
719 struct stereo_metadata: public plugin_metadata<stereo_metadata>
720 {
721     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
722     enum { param_bypass, param_level_in, param_level_out,
723            STEREO_VU_METER_PARAMS, param_balance_in, param_balance_out, param_softclip,
724            param_mute_l, param_mute_r, param_phase_l, param_phase_r,
725            param_mode, param_slev, param_sbal, param_mlev, param_mpan,
726            param_stereo_base, param_delay,
727            param_meter_phase, param_sc_level, param_stereo_phase,
728            param_count };
729     PLUGIN_NAME_ID_LABEL("stereo", "stereo", "Stereo Tools")
730 };
731 /// Markus's Mono Module - metadata
732 struct mono_metadata: public plugin_metadata<mono_metadata>
733 {
734     enum { in_count = 1, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
735     enum { param_bypass, param_level_in, param_level_out,
736            param_meter_in, param_meter_outL, param_meter_outR, param_clip_in,param_clip_outL, param_clip_outR,
737            param_balance_out, param_softclip,
738            param_mute_l, param_mute_r, param_phase_l, param_phase_r,
739            param_delay, param_stereo_base, param_stereo_phase, param_sc_level,
740            param_count };
741     PLUGIN_NAME_ID_LABEL("mono", "mono", "Mono Input")
742 };
743 /// Markus's  multibandenhancer - metadata
744 struct multibandenhancer_metadata: public plugin_metadata<multibandenhancer_metadata>
745 {
746     enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
747     enum { param_bypass, param_level_in, param_level_out,
748            STEREO_VU_METER_PARAMS,
749            param_freq0, param_freq1, param_freq2,
750            param_mode,
751            param_base0, param_base1, param_base2, param_base3,
752            param_drive0, param_drive1, param_drive2, param_drive3,
753            param_blend0, param_blend1, param_blend2, param_blend3,
754            param_solo0, param_solo1, param_solo2, param_solo3,
755            param_count };
756     PLUGIN_NAME_ID_LABEL("multibandenhancer", "multibandenhancer", "Multiband Enhancer")
757 };
758 /// Markus's  multispread - metadata
759 struct multispread_metadata: public plugin_metadata<multispread_metadata>
760 {
761     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
762     enum { param_bypass, param_level_in, param_level_out,
763            STEREO_VU_METER_PARAMS,
764            param_mono, param_filters,
765            param_amount0, param_amount1, param_amount2, param_amount3,
766            param_intensity,
767            param_count };
768     PLUGIN_NAME_ID_LABEL("multispread", "multispread", "Multi Spread")
769 };
770 /// Markus's and Chrischi's Analyzer
771 struct analyzer_metadata: public plugin_metadata<analyzer_metadata>
772 {
773     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = true };
774     enum { param_meter_L, param_meter_R, param_clip_L, param_clip_R,
775            param_analyzer_level, param_analyzer_mode,
776            param_analyzer_scale, param_analyzer_post,
777            param_analyzer_view, param_analyzer_smoothing,
778            param_analyzer_windowing,
779            param_analyzer_accuracy, param_analyzer_speed,
780            param_analyzer_display, param_analyzer_hold, param_analyzer_freeze,
781            param_gonio_mode, param_gonio_use_fade, param_gonio_fade, param_gonio_accuracy, param_gonio_display,
782            param_count };
783     PLUGIN_NAME_ID_LABEL("analyzer", "analyzer", "Analyzer")
784 };
785 /// Markus's and Chrischi's Transient Designer
786 struct transientdesigner_metadata: public plugin_metadata<transientdesigner_metadata>
787 {
788     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
789     enum { param_bypass, param_level_in, param_level_out,
790            STEREO_VU_METER_PARAMS, param_mix,
791            param_attack_time, param_attack_boost,
792            param_sustain_threshold, param_release_time, param_release_boost,
793            param_display, param_display_threshold, param_lookahead,
794            param_view, param_hipass, param_lopass, param_hp_mode, param_lp_mode, param_listen,
795            param_count };
796     PLUGIN_NAME_ID_LABEL("transientdesigner", "transientdesigner", "Transient Designer")
797 };
798 /// Markus's Vinyl Simulator
799 struct vinyl_metadata: public plugin_metadata<vinyl_metadata>
800 {
801     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = true };
802     enum { param_bypass, param_level_in, param_level_out,
803            STEREO_VU_METER_PARAMS,
804            param_drone, param_speed, param_aging, param_freq,
805            param_gain0, param_pitch0, param_active0,
806            param_gain1, param_pitch1, param_active1,
807            param_gain2, param_pitch2, param_active2,
808            param_gain3, param_pitch3, param_active3,
809            param_gain4, param_pitch4, param_active4,
810            param_gain5, param_pitch5, param_active5,
811            param_gain6, param_pitch6, param_active6,
812            param_count };
813     PLUGIN_NAME_ID_LABEL("vinyl", "vinyl", "Vinyl")
814 };
815 /// Markus's Tape Simulator
816 struct tapesimulator_metadata: public plugin_metadata<tapesimulator_metadata>
817 {
818     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
819     enum { param_bypass, param_level_in, param_level_out,
820            STEREO_VU_METER_PARAMS, param_mix, param_lp,
821            param_speed, param_noise, param_mechanical, param_magnetical, param_post,
822            param_count };
823     PLUGIN_NAME_ID_LABEL("tapesimulator", "tapesimulator", "Tape Simulator")
824 };
825 /// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was
826 /// a bad design decision and should be sorted out some day) XXXKF @todo
827 struct organ_enums
828 {
829     enum {
830         par_drawbar1, par_drawbar2, par_drawbar3, par_drawbar4, par_drawbar5, par_drawbar6, par_drawbar7, par_drawbar8, par_drawbar9,
831         par_frequency1, par_frequency2, par_frequency3, par_frequency4, par_frequency5, par_frequency6, par_frequency7, par_frequency8, par_frequency9,
832         par_waveform1, par_waveform2, par_waveform3, par_waveform4, par_waveform5, par_waveform6, par_waveform7, par_waveform8, par_waveform9,
833         par_detune1, par_detune2, par_detune3, par_detune4, par_detune5, par_detune6, par_detune7, par_detune8, par_detune9,
834         par_phase1, par_phase2, par_phase3, par_phase4, par_phase5, par_phase6, par_phase7, par_phase8, par_phase9,
835         par_pan1, par_pan2, par_pan3, par_pan4, par_pan5, par_pan6, par_pan7, par_pan8, par_pan9,
836         par_routing1, par_routing2, par_routing3, par_routing4, par_routing5, par_routing6, par_routing7, par_routing8, par_routing9,
837         par_foldover,
838         par_percdecay, par_perclevel, par_percwave, par_percharm, par_percvel2amp,
839         par_percfmdecay, par_percfmdepth, par_percfmwave, par_percfmharm, par_percvel2fm,
840         par_perctrigger, par_percstereo,
841         par_filterchain,
842         par_filter1type,
843         par_master,
844         par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf,
845         par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf,
846         par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl, par_eg1ampctl,
847         par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl,
848         par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl,
849         par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode, par_lfotype,
850         par_transpose, par_detune,
851         par_polyphony,
852         par_quadenv,
853         par_pwhlrange,
854         par_bassfreq,
855         par_bassgain,
856         par_treblefreq,
857         par_treblegain,
858         par_midi,
859         param_count
860     };
861     enum organ_waveform {
862         wave_sine,
863         wave_sinepl1, wave_sinepl2, wave_sinepl3,
864         wave_ssaw, wave_ssqr, wave_spls, wave_saw, wave_sqr, wave_pulse, wave_sinepl05, wave_sqr05, wave_halfsin, wave_clvg, wave_bell, wave_bell2,
865         wave_w1, wave_w2, wave_w3, wave_w4, wave_w5, wave_w6, wave_w7, wave_w8, wave_w9,
866         wave_dsaw, wave_dsqr, wave_dpls,
867         wave_count_small,
868         wave_strings = wave_count_small,
869         wave_strings2,
870         wave_sinepad,
871         wave_bellpad,
872         wave_space,
873         wave_choir,
874         wave_choir2,
875         wave_choir3,
876         wave_count,
877         wave_count_big = wave_count - wave_count_small
878     };
879     enum {
880         ampctl_none,
881         ampctl_direct,
882         ampctl_f1,
883         ampctl_f2,
884         ampctl_all,
885         ampctl_count
886     };
887     enum {
888         lfotype_allpass = 0,
889         lfotype_cv1,
890         lfotype_cv2,
891         lfotype_cv3,
892         lfotype_cvfull,
893         lfotype_count
894     };
895     enum {
896         lfomode_off = 0,
897         lfomode_direct,
898         lfomode_filter1,
899         lfomode_filter2,
900         lfomode_voice,
901         lfomode_global,
902         lfomode_count
903     };
904     enum {
905         perctrig_first = 0,
906         perctrig_each,
907         perctrig_eachplus,
908         perctrig_polyphonic,
909         perctrig_count
910     };
911 };
912 
913 /// Organ - metadata
914 struct organ_metadata: public organ_enums, public plugin_metadata<organ_metadata>
915 {
916     enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true, require_instance_access = false };
917     PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ")
918 
919 public:
920     plugin_command_info *get_commands() const;
921     void get_configure_vars(std::vector<std::string> &names) const;
922 };
923 
924 /// FluidSynth - metadata
925 struct fluidsynth_metadata: public plugin_metadata<fluidsynth_metadata>
926 {
927     enum { par_master, par_interpolation, par_reverb, par_chorus, param_count };
928     enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = false, require_instance_access = true };
929     PLUGIN_NAME_ID_LABEL("fluidsynth", "fluidsynth", "Fluidsynth")
930 
931 public:
932     void get_configure_vars(std::vector<std::string> &names) const;
933 };
934 
935 /// Wavetable - metadata
936 struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
937 {
938     enum {
939         wt_fmshiny,
940         wt_fmshiny2,
941         wt_rezo,
942         wt_metal,
943         wt_bell,
944         wt_blah,
945         wt_pluck,
946         wt_stretch,
947         wt_stretch2,
948         wt_hardsync,
949         wt_hardsync2,
950         wt_softsync,
951         wt_bell2,
952         wt_bell3,
953         wt_tine,
954         wt_tine2,
955         wt_clav,
956         wt_clav2,
957         wt_gtr,
958         wt_gtr2,
959         wt_gtr3,
960         wt_gtr4,
961         wt_gtr5,
962         wt_reed,
963         wt_reed2,
964         wt_silver,
965         wt_brass,
966         wt_multi,
967         wt_multi2,
968         wt_count
969     };
970     enum {
971         modsrc_none,
972         modsrc_velocity,
973         modsrc_pressure,
974         modsrc_modwheel,
975         modsrc_env1,
976         modsrc_env2,
977         modsrc_env3,
978         modsrc_lfo1,
979         modsrc_lfo2,
980         modsrc_keyfollow,
981         modsrc_count,
982     };
983     enum {
984         moddest_none,
985         moddest_attenuation,
986         moddest_oscmix,
987         moddest_cutoff,
988         moddest_resonance,
989         moddest_o1shift,
990         moddest_o2shift,
991         moddest_o1detune,
992         moddest_o2detune,
993         moddest_pitch,
994         moddest_count,
995     };
996     enum {
997         par_o1wave, par_o1offset, par_o1transpose, par_o1detune, par_o1level,
998         par_o2wave, par_o2offset, par_o2transpose, par_o2detune, par_o2level,
999         par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1fade, par_eg1release, par_eg1velscl,
1000         par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2fade, par_eg2release, par_eg2velscl,
1001         par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3fade, par_eg3release, par_eg3velscl,
1002         par_pwhlrange,
1003         par_eg1toamp,
1004         par_lfo1rate,
1005         par_lfo2rate,
1006         par_midi,
1007         param_count };
1008     enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true, require_instance_access = false };
1009     enum { mod_matrix_slots = 10 };
1010     enum { step_size = 64 };
1011     PLUGIN_NAME_ID_LABEL("wavetable", "wavetable", "Wavetable")
1012     mod_matrix_metadata mm_metadata;
1013 
1014     wavetable_metadata();
1015     /// Lookup of table edit interface
get_table_metadata_ifacewavetable_metadata1016     virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; }
1017     void get_configure_vars(std::vector<std::string> &names) const;
1018 };
1019 
1020 struct pitch_metadata: public plugin_metadata<pitch_metadata>
1021 {
1022     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
1023     enum {
1024         par_pd_threshold,
1025         par_pd_subdivide,
1026         par_tune, par_note, par_cents, par_clarity, par_freq,
1027         param_count
1028     };
1029     PLUGIN_NAME_ID_LABEL("pitch", "pitch", "Pitch Tools")
1030 };
1031 
1032 struct widgets_metadata: public plugin_metadata<widgets_metadata>
1033 {
1034     enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true, require_instance_access = false };
1035     enum {
1036         param_meter1,
1037         param_meter2,
1038         param_meter3,
1039         param_meter4,
1040         param_value1,
1041         param_value2,
1042         param_count
1043     };
1044     PLUGIN_NAME_ID_LABEL("widgets", "widgets", "Widget Test")
1045 };
1046 
1047 };
1048 
1049 #endif
1050