Vocoder: toggle switch for detection LEDs
[calf.git] / src / calf / metadata.h
blob631e42daf2bf0158029fdd8e57d005b52503e08e
1 /* Calf DSP Library
2 * Audio module (plugin) metadata - header file
4 * Copyright (C) 2007-2008 Krzysztof Foltman
5 * Copyright (C) 2008 Thor Harald Johansen <thj@thj.no>
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.
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.
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.
23 #ifndef __CALF_METADATA_H
24 #define __CALF_METADATA_H
26 #include "giface.h"
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
31 namespace calf_plugins {
33 struct flanger_metadata: public plugin_metadata<flanger_metadata>
35 public:
36 enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, par_dryamount, param_count };
37 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
38 PLUGIN_NAME_ID_LABEL("flanger", "flanger", "Flanger")
41 struct phaser_metadata: public plugin_metadata<phaser_metadata>
43 enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, par_dryamount, param_count };
44 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
45 PLUGIN_NAME_ID_LABEL("phaser", "phaser", "Phaser")
48 struct filter_metadata: public plugin_metadata<filter_metadata>
50 enum { par_cutoff, par_resonance, par_mode, par_inertia, param_count };
51 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = false, support_midi = false };
52 PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter")
53 /// do not export mode and inertia as CVs, as those are settings and not parameters
54 bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
57 /// Filterclavier - metadata
58 struct filterclavier_metadata: public plugin_metadata<filterclavier_metadata>
60 enum { par_transpose, par_detune, par_max_resonance, par_mode, par_inertia, param_count };
61 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, require_midi = true, support_midi = true };
62 PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier")
63 /// do not export mode and inertia as CVs, as those are settings and not parameters
64 bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
67 struct reverb_metadata: public plugin_metadata<reverb_metadata>
69 enum { par_clip, par_meter_wet, par_meter_out, par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count };
70 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
71 PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb")
74 struct vintage_delay_metadata: public plugin_metadata<vintage_delay_metadata>
76 enum { par_bpm, par_bpm_host, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, par_width, par_sync, param_count };
77 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false };
78 PLUGIN_NAME_ID_LABEL("vintagedelay", "vintagedelay", "Vintage Delay")
81 struct comp_delay_metadata: public plugin_metadata<comp_delay_metadata>
83 enum { par_distance_mm, par_distance_cm, par_distance_m, par_dry, par_wet, param_temp, param_bypass, param_count };
84 enum { in_count = 1, out_count = 1, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false };
85 PLUGIN_NAME_ID_LABEL("compdelay", "compdelay", "Compensation Delay Line")
88 struct rotary_speaker_metadata: public plugin_metadata<rotary_speaker_metadata>
90 public:
91 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, param_count };
92 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = false, rt_capable = true };
93 PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker")
96 /// A multitap stereo chorus thing - metadata
97 struct multichorus_metadata: public plugin_metadata<multichorus_metadata>
99 public:
100 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, param_count };
101 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false };
102 PLUGIN_NAME_ID_LABEL("multichorus", "multichorus", "Multi Chorus")
105 enum CalfEqMode {
106 MODE12DB,
107 MODE24DB,
108 MODE36DB
111 /// Monosynth - metadata
112 struct monosynth_metadata: public plugin_metadata<monosynth_metadata>
114 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 };
115 enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 };
116 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,
117 par_env1attack, par_env1decay, par_env1sustain, par_env1fade, par_env1release,
118 par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange,
119 par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo, par_scaledetune,
120 par_env2tocutoff, par_env2tores, par_env2toamp,
121 par_env2attack, par_env2decay, par_env2sustain, par_env2fade, par_env2release,
122 par_stretch1, par_window1,
123 par_lfo1trig, par_lfo2trig,
124 par_lfo2rate, par_lfo2delay,
125 par_o2unison, par_o2unisonfrq,
126 par_osc1xpose,
127 param_count };
128 enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true };
129 enum { step_size = 64, step_shift = 6 };
130 enum { mod_matrix_slots = 10 };
131 enum {
132 modsrc_none,
133 modsrc_velocity,
134 modsrc_pressure,
135 modsrc_modwheel,
136 modsrc_env1,
137 modsrc_env2,
138 modsrc_lfo1,
139 modsrc_lfo2,
140 modsrc_count,
142 enum {
143 moddest_none,
144 moddest_attenuation,
145 moddest_oscmix,
146 moddest_cutoff,
147 moddest_resonance,
148 moddest_o1detune,
149 moddest_o2detune,
150 moddest_o1pw,
151 moddest_o2pw,
152 moddest_o1stretch,
153 moddest_o2unisonamp,
154 moddest_o2unisondetune,
155 moddest_count,
157 PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth")
159 mod_matrix_metadata mm_metadata;
161 monosynth_metadata();
162 /// Lookup of table edit interface
163 virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; }
164 void get_configure_vars(std::vector<std::string> &names) const;
167 /// Thor's compressor - metadata
168 /// Added some meters and stripped the weighting part
169 struct compressor_metadata: public plugin_metadata<compressor_metadata>
171 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
172 enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
173 param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression, param_mix,
174 param_count };
175 PLUGIN_NAME_ID_LABEL("compressor", "compressor", "Compressor")
178 /// Damien's compressor - metadata
179 /// Added some meters and stripped the weighting part
180 struct monocompressor_metadata: public plugin_metadata<monocompressor_metadata>
182 enum { in_count = 1, out_count = 1, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
183 enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
184 param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_compression, param_mix,
185 param_count };
186 PLUGIN_NAME_ID_LABEL("monocompressor", "monocompressor", "Mono Compressor")
189 /// Markus's sidechain compressor - metadata
190 struct sidechaincompressor_metadata: public plugin_metadata<sidechaincompressor_metadata>
192 enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
193 enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
194 param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_compression,
195 param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level,
196 param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_mix, param_count };
197 PLUGIN_NAME_ID_LABEL("sidechaincompressor", "sidechaincompressor", "Sidechain Compressor")
200 /// Markus's multibandcompressor - metadata
201 struct multibandcompressor_metadata: public plugin_metadata<multibandcompressor_metadata>
203 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
204 enum { param_bypass, param_level_in, param_level_out,
205 STEREO_VU_METER_PARAMS,
206 param_freq0, param_freq1, param_freq2,
207 param_mode,
208 param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0,
209 param_detection0, param_compression0, param_output0, param_bypass0, param_solo0,
210 param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1,
211 param_detection1, param_compression1, param_output1, param_bypass1, param_solo1,
212 param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2,
213 param_detection2, param_compression2, param_output2, param_bypass2, param_solo2,
214 param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3,
215 param_detection3, param_compression3, param_output3, param_bypass3, param_solo3,
216 param_notebook,
217 param_count };
218 PLUGIN_NAME_ID_LABEL("multibandcompressor", "multibandcompressor", "Multiband Compressor")
221 /// Markus's deesser - metadata
222 struct deesser_metadata: public plugin_metadata<deesser_metadata>
224 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
225 enum { param_bypass, param_detected, param_compression, param_detected_led, param_clip_out,
226 param_detection, param_mode,
227 param_threshold, param_ratio, param_laxity, param_makeup,
228 param_f1_freq, param_f2_freq, param_f1_level, param_f2_level, param_f2_q,
229 param_sc_listen, param_count };
230 PLUGIN_NAME_ID_LABEL("deesser", "deesser", "Deesser")
233 /// Damiens' Gate - metadata
234 /// Added some meters and stripped the weighting part
235 struct gate_metadata: public plugin_metadata<gate_metadata>
237 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
238 enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
239 param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating,
240 param_count };
241 PLUGIN_NAME_ID_LABEL("gate", "gate", "Gate")
244 /// Markus's sidechain gate - metadata
245 struct sidechaingate_metadata: public plugin_metadata<sidechaingate_metadata>
247 enum { in_count = 4, out_count = 2, ins_optional = 2, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
248 enum { param_bypass, param_level_in, MONO_VU_METER_PARAMS,
249 param_range, param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_gating,
250 param_sc_mode, param_f1_freq, param_f2_freq, param_f1_level, param_f2_level,
251 param_sc_listen, param_f1_active, param_f2_active, param_sc_route, param_sc_level, param_count };
252 PLUGIN_NAME_ID_LABEL("sidechaingate", "sidechaingate", "Sidechain Gate")
255 /// Markus's multiband gate - metadata
256 struct multibandgate_metadata: public plugin_metadata<multibandgate_metadata>
258 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
259 enum { param_bypass, param_level_in, param_level_out,
260 STEREO_VU_METER_PARAMS,
261 param_freq0, param_freq1, param_freq2,
262 param_mode,
263 param_range0, param_threshold0, param_ratio0, param_attack0, param_release0, param_makeup0, param_knee0,
264 param_detection0, param_gating0, param_output0, param_bypass0, param_solo0,
265 param_range1, param_threshold1, param_ratio1, param_attack1, param_release1, param_makeup1, param_knee1,
266 param_detection1, param_gating1, param_output1, param_bypass1, param_solo1,
267 param_range2, param_threshold2, param_ratio2, param_attack2, param_release2, param_makeup2, param_knee2,
268 param_detection2, param_gating2, param_output2, param_bypass2, param_solo2,
269 param_range3, param_threshold3, param_ratio3, param_attack3, param_release3, param_makeup3, param_knee3,
270 param_detection3, param_gating3, param_output3, param_bypass3, param_solo3,
271 param_notebook,
272 param_count };
273 PLUGIN_NAME_ID_LABEL("multibandgate", "multibandgate", "Multiband Gate")
276 /// Markus's limiter - metadata
277 struct limiter_metadata: public plugin_metadata<limiter_metadata>
279 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
280 enum { param_bypass, param_level_in, param_level_out,
281 STEREO_VU_METER_PARAMS,
282 param_limit, param_attack, param_release,
283 param_att,
284 param_asc, param_asc_led, param_asc_coeff,
285 param_oversampling,
286 param_count };
287 PLUGIN_NAME_ID_LABEL("limiter", "limiter", "Limiter")
290 /// Markus's multibandlimiter - metadata
291 struct multibandlimiter_metadata: public plugin_metadata<multibandlimiter_metadata>
293 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
294 enum { param_bypass, param_level_in, param_level_out,
295 STEREO_VU_METER_PARAMS,
296 param_freq0, param_freq1, param_freq2,
297 param_mode,
298 param_limit, param_attack, param_release, param_minrel,
299 param_att0, param_att1, param_att2, param_att3,
300 param_weight0, param_weight1, param_weight2, param_weight3,
301 param_release0, param_release1, param_release2, param_release3,
302 param_solo0, param_solo1, param_solo2, param_solo3,
303 param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3,
304 param_asc, param_asc_led, param_asc_coeff,
305 param_oversampling,
306 param_count };
307 PLUGIN_NAME_ID_LABEL("multibandlimiter", "multibandlimiter", "Multiband Limiter")
310 /// Damien's RIAA and CD Emphasis - metadata
311 struct emphasis_metadata: public plugin_metadata<emphasis_metadata>
313 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
314 enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS, param_mode, param_type,
315 param_count };
316 PLUGIN_NAME_ID_LABEL("emphasis", "emphasis", "Emphasis")
319 /// Markus's 5-band EQ - metadata
320 struct equalizer5band_metadata: public plugin_metadata<equalizer5band_metadata>
322 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
323 enum { param_bypass, param_level_in, param_level_out,
324 STEREO_VU_METER_PARAMS,
325 param_ls_active, param_ls_level, param_ls_freq,
326 param_hs_active, param_hs_level, param_hs_freq,
327 param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
328 param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
329 param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
330 param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
331 param_count };
332 // dummy parameter numbers, shouldn't be used EVER, they're only there to avoid pushing LP/HP filters to a separate class
333 // and potentially making inlining and optimization harder for the compiler
334 enum { param_lp_active = 0xDEADBEEF, param_hp_active, param_hp_mode, param_lp_mode, param_hp_freq, param_lp_freq };
335 enum { PeakBands = 3, first_graph_param = param_ls_active, last_graph_param = param_p3_q };
336 PLUGIN_NAME_ID_LABEL("equalizer5band", "eq5", "Equalizer 5 Band")
339 /// Markus's 8-band EQ - metadata
340 struct equalizer8band_metadata: public plugin_metadata<equalizer8band_metadata>
342 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
343 enum { param_bypass, param_level_in, param_level_out,
344 STEREO_VU_METER_PARAMS,
345 param_hp_active, param_hp_freq, param_hp_mode,
346 param_lp_active, param_lp_freq, param_lp_mode,
347 param_ls_active, param_ls_level, param_ls_freq,
348 param_hs_active, param_hs_level, param_hs_freq,
349 param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
350 param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
351 param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
352 param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
353 param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
354 param_count };
355 enum { PeakBands = 4, first_graph_param = param_hp_active, last_graph_param = param_p4_q };
356 PLUGIN_NAME_ID_LABEL("equalizer8band", "eq8", "Equalizer 8 Band")
358 /// Markus's 12-band EQ - metadata
359 struct equalizer12band_metadata: public plugin_metadata<equalizer12band_metadata>
361 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
362 enum { param_bypass, param_level_in, param_level_out,
363 STEREO_VU_METER_PARAMS,
364 param_hp_active, param_hp_freq, param_hp_mode,
365 param_lp_active, param_lp_freq, param_lp_mode,
366 param_ls_active, param_ls_level, param_ls_freq,
367 param_hs_active, param_hs_level, param_hs_freq,
368 param_p1_active, param_p1_level, param_p1_freq, param_p1_q,
369 param_p2_active, param_p2_level, param_p2_freq, param_p2_q,
370 param_p3_active, param_p3_level, param_p3_freq, param_p3_q,
371 param_p4_active, param_p4_level, param_p4_freq, param_p4_q,
372 param_p5_active, param_p5_level, param_p5_freq, param_p5_q,
373 param_p6_active, param_p6_level, param_p6_freq, param_p6_q,
374 param_p7_active, param_p7_level, param_p7_freq, param_p7_q,
375 param_p8_active, param_p8_level, param_p8_freq, param_p8_q,
376 param_individuals, param_zoom, param_analyzer_active, param_analyzer_mode,
377 param_count };
378 enum { PeakBands = 8, first_graph_param = param_hp_active, last_graph_param = param_p8_q };
379 PLUGIN_NAME_ID_LABEL("equalizer12band", "eq12", "Equalizer 12 Band")
381 /// Markus's X-Overs
382 struct xover2_metadata: public plugin_metadata<xover2_metadata>
384 enum { in_count = 2, out_count = 4, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
385 enum { param_level, param_meter_0, param_meter_1, param_mode,
386 param_freq0,
387 param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
388 param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
389 param_count };
390 enum { channels = 2, bands = 2 };
391 PLUGIN_NAME_ID_LABEL("xover2band", "xover2", "X-Over 2 Band")
393 struct xover3_metadata: public plugin_metadata<xover3_metadata>
395 enum { in_count = 2, out_count = 6, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
396 enum { param_level, param_meter_0, param_meter_1, param_mode,
397 param_freq0, param_freq1,
398 param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
399 param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
400 param_level3, param_active3, param_phase3, param_delay3, param_meter_03, param_meter_13,
401 param_count };
402 enum { channels = 2, bands = 3 };
403 PLUGIN_NAME_ID_LABEL("xover3band", "xover3", "X-Over 3 Band")
405 struct xover4_metadata: public plugin_metadata<xover4_metadata>
407 enum { in_count = 2, out_count = 8, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
408 enum { param_level, param_meter_0, param_meter_1, param_mode,
409 param_freq0, param_freq1, param_freq2,
410 param_level1, param_active1, param_phase1, param_delay1, param_meter_01, param_meter_11,
411 param_level2, param_active2, param_phase2, param_delay2, param_meter_02, param_meter_12,
412 param_level3, param_active3, param_phase3, param_delay3, param_meter_03, param_meter_13,
413 param_level4, param_active4, param_phase4, param_delay4, param_meter_04, param_meter_14,
414 param_count };
415 enum { channels = 2, bands = 4 };
416 PLUGIN_NAME_ID_LABEL("xover4band", "xover4", "X-Over 4 Band")
419 /// Markus and Chrischis Vocoder - metadata
420 struct vocoder_metadata: public plugin_metadata<vocoder_metadata>
422 enum { in_count = 4, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
423 enum { param_bypass, param_link, param_detectors,
424 param_carrier_in, param_carrier_inL, param_carrier_inR, param_carrier_clip_inL, param_carrier_clip_inR,
425 param_mod_in, param_mod_inL, param_mod_inR, param_mod_clip_inL, param_mod_clip_inR,
426 param_out, param_outL, param_outR, param_clip_outL, param_clip_outR,
427 param_carrier, param_mod, param_proc, param_bands, param_hiq,
428 param_attack, param_release, param_analyzer,
429 param_volume0, param_pan0, param_noise0, param_mod0, param_active0, param_solo0, param_level0,
430 param_volume1, param_pan1, param_noise1, param_mod1, param_active1, param_solo1, param_level1,
431 param_volume2, param_pan2, param_noise2, param_mod2, param_active2, param_solo2, param_level2,
432 param_volume3, param_pan3, param_noise3, param_mod3, param_active3, param_solo3, param_level3,
433 param_volume4, param_pan4, param_noise4, param_mod4, param_active4, param_solo4, param_level4,
434 param_volume5, param_pan5, param_noise5, param_mod5, param_active5, param_solo5, param_level5,
435 param_volume6, param_pan6, param_noise6, param_mod6, param_active6, param_solo6, param_level6,
436 param_volume7, param_pan7, param_noise7, param_mod7, param_active7, param_solo7, param_level7,
437 param_volume8, param_pan8, param_noise8, param_mod8, param_active8, param_solo8, param_level8,
438 param_volume9, param_pan9, param_noise9, param_mod9, param_active9, param_solo9, param_level9,
439 param_volume10, param_pan10, param_noise10, param_mod10, param_active10, param_solo10, param_level10,
440 param_volume11, param_pan11, param_noise11, param_mod11, param_active11, param_solo11, param_level11,
441 param_volume12, param_pan12, param_noise12, param_mod12, param_active12, param_solo12, param_level12,
442 param_volume13, param_pan13, param_noise13, param_mod13, param_active13, param_solo13, param_level13,
443 param_volume14, param_pan14, param_noise14, param_mod14, param_active14, param_solo14, param_level14,
444 param_volume15, param_pan15, param_noise15, param_mod15, param_active15, param_solo15, param_level15,
445 param_volume16, param_pan16, param_noise16, param_mod16, param_active16, param_solo16, param_level16,
446 param_volume17, param_pan17, param_noise17, param_mod17, param_active17, param_solo17, param_level17,
447 param_volume18, param_pan18, param_noise18, param_mod18, param_active18, param_solo18, param_level18,
448 param_volume19, param_pan19, param_noise19, param_mod19, param_active19, param_solo19, param_level19,
449 param_volume20, param_pan20, param_noise20, param_mod20, param_active20, param_solo20, param_level20,
450 param_volume21, param_pan21, param_noise21, param_mod21, param_active21, param_solo21, param_level21,
451 param_volume22, param_pan22, param_noise22, param_mod22, param_active22, param_solo22, param_level22,
452 param_volume23, param_pan23, param_noise23, param_mod23, param_active23, param_solo23, param_level23,
453 param_volume24, param_pan24, param_noise24, param_mod24, param_active24, param_solo24, param_level24,
454 param_volume25, param_pan25, param_noise25, param_mod25, param_active25, param_solo25, param_level25,
455 param_volume26, param_pan26, param_noise26, param_mod26, param_active26, param_solo26, param_level26,
456 param_volume27, param_pan27, param_noise27, param_mod27, param_active27, param_solo27, param_level27,
457 param_volume28, param_pan28, param_noise28, param_mod28, param_active28, param_solo28, param_level28,
458 param_volume29, param_pan29, param_noise29, param_mod29, param_active29, param_solo29, param_level29,
459 param_volume30, param_pan30, param_noise30, param_mod30, param_active30, param_solo30, param_level30,
460 param_volume31, param_pan31, param_noise31, param_mod31, param_active31, param_solo31, param_level31,
461 param_count };
462 enum { band_params = 7 };
463 PLUGIN_NAME_ID_LABEL("vocoder", "vocoder", "Vocoder")
466 /// Markus's Pulsator - metadata
467 struct pulsator_metadata: public plugin_metadata<pulsator_metadata>
469 enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
470 enum { param_bypass, param_level_in, param_level_out, STEREO_VU_METER_PARAMS,
471 param_mode, param_freq, param_amount, param_offset, param_mono, param_reset, param_count };
472 PLUGIN_NAME_ID_LABEL("pulsator", "pulsator", "Pulsator")
475 /// Markus's Saturator - metadata
476 struct saturator_metadata: public plugin_metadata<saturator_metadata>
478 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
479 enum { param_bypass, param_level_in, param_level_out, param_mix, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive,
480 param_lp_pre_freq, param_hp_pre_freq, param_lp_post_freq, param_hp_post_freq,
481 param_p_freq, param_p_level, param_p_q, param_count };
482 PLUGIN_NAME_ID_LABEL("saturator", "saturator", "Saturator")
484 /// Markus's Exciter - metadata
485 struct exciter_metadata: public plugin_metadata<exciter_metadata>
487 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
488 enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive,
489 param_freq, param_listen, param_ceil_active, param_ceil, param_count };
490 PLUGIN_NAME_ID_LABEL("exciter", "exciter", "Exciter")
492 /// Markus's Bass Enhancer - metadata
493 struct bassenhancer_metadata: public plugin_metadata<bassenhancer_metadata>
495 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
496 enum { param_bypass, param_level_in, param_level_out, param_amount, MONO_VU_METER_PARAMS, param_drive, param_blend, param_meter_drive,
497 param_freq, param_listen, param_floor_active, param_floor, param_count };
498 PLUGIN_NAME_ID_LABEL("bassenhancer", "bassenhancer", "Bass Enhancer")
500 /// Markus's and Chrischi's Crusher Module - metadata
501 struct crusher_metadata: public plugin_metadata<crusher_metadata>
503 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
504 enum { param_bypass, param_level_in, param_level_out,
505 STEREO_VU_METER_PARAMS,
506 param_bits, param_morph, param_mode, param_dc, param_aa,
507 param_samples, param_lfo, param_lforange, param_lforate,
508 param_count };
509 PLUGIN_NAME_ID_LABEL("crusher", "crusher", "Crusher")
511 /// Markus's Stereo Module - metadata
512 struct stereo_metadata: public plugin_metadata<stereo_metadata>
514 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
515 enum { param_bypass, param_level_in, param_level_out,
516 STEREO_VU_METER_PARAMS, param_balance_in, param_balance_out, param_softclip,
517 param_mute_l, param_mute_r, param_phase_l, param_phase_r,
518 param_mode, param_slev, param_sbal, param_mlev, param_mpan,
519 param_stereo_base, param_delay,
520 param_meter_phase, param_sc_level, param_stereo_phase,
521 param_count };
522 PLUGIN_NAME_ID_LABEL("stereo", "stereo", "Stereo Tools")
524 /// Markus's Mono Module - metadata
525 struct mono_metadata: public plugin_metadata<mono_metadata>
527 enum { in_count = 1, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = false, require_midi = false, rt_capable = true };
528 enum { param_bypass, param_level_in, param_level_out,
529 param_meter_in, param_meter_outL, param_meter_outR, param_clip_in,param_clip_outL, param_clip_outR,
530 param_balance_out, param_softclip,
531 param_mute_l, param_mute_r, param_phase_l, param_phase_r,
532 param_delay, param_stereo_base, param_stereo_phase, param_sc_level,
533 param_count };
534 PLUGIN_NAME_ID_LABEL("mono", "mono", "Mono Input")
536 /// Markus's and Chrischi's Analyzer
537 struct analyzer_metadata: public plugin_metadata<analyzer_metadata>
539 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
540 enum { param_meter_L, param_meter_R, param_clip_L, param_clip_R,
541 param_analyzer_level, param_analyzer_mode,
542 param_analyzer_scale, param_analyzer_post,
543 param_analyzer_view, param_analyzer_smoothing,
544 param_analyzer_windowing,
545 param_analyzer_accuracy, param_analyzer_speed,
546 param_analyzer_display, param_analyzer_hold, param_analyzer_freeze,
547 param_gonio_mode, param_gonio_use_fade, param_gonio_fade, param_gonio_accuracy, param_gonio_display,
548 param_count };
549 PLUGIN_NAME_ID_LABEL("analyzer", "analyzer", "Analyzer")
551 /// Markus's and Chrischi's Transient Designer
552 struct transientdesigner_metadata: public plugin_metadata<transientdesigner_metadata>
554 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
555 enum { param_bypass, param_level_in, param_level_out,
556 STEREO_VU_METER_PARAMS, param_mix,
557 param_attack_time, param_attack_boost,
558 param_sustain_threshold, param_release_time, param_release_boost,
559 param_display, param_display_threshold, param_lookahead,
560 param_input, param_output, param_envelope, param_attack, param_release,
561 param_count };
562 PLUGIN_NAME_ID_LABEL("transientdesigner", "transientdesigner", "Transient Designer")
564 /// Chrischi's and Markus's Tape Simulator
565 struct tapesimulator_metadata: public plugin_metadata<tapesimulator_metadata>
567 enum { in_count = 2, out_count = 2, ins_optional = 1, outs_optional = 1, support_midi = false, require_midi = false, rt_capable = true };
568 enum { param_bypass, param_level_in, param_level_out,
569 STEREO_VU_METER_PARAMS, param_mix, param_lp,
570 param_speed, param_noise, param_mechanical, param_magnetical, param_post,
571 param_count };
572 PLUGIN_NAME_ID_LABEL("tapesimulator", "tapesimulator", "Tape Simulator")
574 /// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was
575 /// a bad design decision and should be sorted out some day) XXXKF @todo
576 struct organ_enums
578 enum {
579 par_drawbar1, par_drawbar2, par_drawbar3, par_drawbar4, par_drawbar5, par_drawbar6, par_drawbar7, par_drawbar8, par_drawbar9,
580 par_frequency1, par_frequency2, par_frequency3, par_frequency4, par_frequency5, par_frequency6, par_frequency7, par_frequency8, par_frequency9,
581 par_waveform1, par_waveform2, par_waveform3, par_waveform4, par_waveform5, par_waveform6, par_waveform7, par_waveform8, par_waveform9,
582 par_detune1, par_detune2, par_detune3, par_detune4, par_detune5, par_detune6, par_detune7, par_detune8, par_detune9,
583 par_phase1, par_phase2, par_phase3, par_phase4, par_phase5, par_phase6, par_phase7, par_phase8, par_phase9,
584 par_pan1, par_pan2, par_pan3, par_pan4, par_pan5, par_pan6, par_pan7, par_pan8, par_pan9,
585 par_routing1, par_routing2, par_routing3, par_routing4, par_routing5, par_routing6, par_routing7, par_routing8, par_routing9,
586 par_foldover,
587 par_percdecay, par_perclevel, par_percwave, par_percharm, par_percvel2amp,
588 par_percfmdecay, par_percfmdepth, par_percfmwave, par_percfmharm, par_percvel2fm,
589 par_perctrigger, par_percstereo,
590 par_filterchain,
591 par_filter1type,
592 par_master,
593 par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf,
594 par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf,
595 par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl, par_eg1ampctl,
596 par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl,
597 par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl,
598 par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode, par_lfotype,
599 par_transpose, par_detune,
600 par_polyphony,
601 par_quadenv,
602 par_pwhlrange,
603 par_bassfreq,
604 par_bassgain,
605 par_treblefreq,
606 par_treblegain,
607 param_count
609 enum organ_waveform {
610 wave_sine,
611 wave_sinepl1, wave_sinepl2, wave_sinepl3,
612 wave_ssaw, wave_ssqr, wave_spls, wave_saw, wave_sqr, wave_pulse, wave_sinepl05, wave_sqr05, wave_halfsin, wave_clvg, wave_bell, wave_bell2,
613 wave_w1, wave_w2, wave_w3, wave_w4, wave_w5, wave_w6, wave_w7, wave_w8, wave_w9,
614 wave_dsaw, wave_dsqr, wave_dpls,
615 wave_count_small,
616 wave_strings = wave_count_small,
617 wave_strings2,
618 wave_sinepad,
619 wave_bellpad,
620 wave_space,
621 wave_choir,
622 wave_choir2,
623 wave_choir3,
624 wave_count,
625 wave_count_big = wave_count - wave_count_small
627 enum {
628 ampctl_none,
629 ampctl_direct,
630 ampctl_f1,
631 ampctl_f2,
632 ampctl_all,
633 ampctl_count
635 enum {
636 lfotype_allpass = 0,
637 lfotype_cv1,
638 lfotype_cv2,
639 lfotype_cv3,
640 lfotype_cvfull,
641 lfotype_count
643 enum {
644 lfomode_off = 0,
645 lfomode_direct,
646 lfomode_filter1,
647 lfomode_filter2,
648 lfomode_voice,
649 lfomode_global,
650 lfomode_count
652 enum {
653 perctrig_first = 0,
654 perctrig_each,
655 perctrig_eachplus,
656 perctrig_polyphonic,
657 perctrig_count
661 /// Organ - metadata
662 struct organ_metadata: public organ_enums, public plugin_metadata<organ_metadata>
664 enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true };
665 PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ")
667 public:
668 plugin_command_info *get_commands();
669 void get_configure_vars(std::vector<std::string> &names) const;
672 /// FluidSynth - metadata
673 struct fluidsynth_metadata: public plugin_metadata<fluidsynth_metadata>
675 enum { par_master, par_interpolation, par_reverb, par_chorus, param_count };
676 enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = false };
677 PLUGIN_NAME_ID_LABEL("fluidsynth", "fluidsynth", "Fluidsynth")
679 public:
680 void get_configure_vars(std::vector<std::string> &names) const;
683 /// Wavetable - metadata
684 struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
686 enum {
687 wt_fmshiny,
688 wt_fmshiny2,
689 wt_rezo,
690 wt_metal,
691 wt_bell,
692 wt_blah,
693 wt_pluck,
694 wt_stretch,
695 wt_stretch2,
696 wt_hardsync,
697 wt_hardsync2,
698 wt_softsync,
699 wt_bell2,
700 wt_bell3,
701 wt_tine,
702 wt_tine2,
703 wt_clav,
704 wt_clav2,
705 wt_gtr,
706 wt_gtr2,
707 wt_gtr3,
708 wt_gtr4,
709 wt_gtr5,
710 wt_reed,
711 wt_reed2,
712 wt_silver,
713 wt_brass,
714 wt_multi,
715 wt_multi2,
716 wt_count
718 enum {
719 modsrc_none,
720 modsrc_velocity,
721 modsrc_pressure,
722 modsrc_modwheel,
723 modsrc_env1,
724 modsrc_env2,
725 modsrc_env3,
726 modsrc_lfo1,
727 modsrc_lfo2,
728 modsrc_keyfollow,
729 modsrc_count,
731 enum {
732 moddest_none,
733 moddest_attenuation,
734 moddest_oscmix,
735 moddest_cutoff,
736 moddest_resonance,
737 moddest_o1shift,
738 moddest_o2shift,
739 moddest_o1detune,
740 moddest_o2detune,
741 moddest_pitch,
742 moddest_count,
744 enum {
745 par_o1wave, par_o1offset, par_o1transpose, par_o1detune, par_o1level,
746 par_o2wave, par_o2offset, par_o2transpose, par_o2detune, par_o2level,
747 par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1fade, par_eg1release, par_eg1velscl,
748 par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2fade, par_eg2release, par_eg2velscl,
749 par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3fade, par_eg3release, par_eg3velscl,
750 par_pwhlrange,
751 par_eg1toamp,
752 par_lfo1rate,
753 par_lfo2rate,
754 param_count };
755 enum { in_count = 0, out_count = 2, ins_optional = 0, outs_optional = 0, support_midi = true, require_midi = true, rt_capable = true };
756 enum { mod_matrix_slots = 10 };
757 enum { step_size = 64 };
758 PLUGIN_NAME_ID_LABEL("wavetable", "wavetable", "Wavetable")
759 mod_matrix_metadata mm_metadata;
761 wavetable_metadata();
762 /// Lookup of table edit interface
763 virtual const table_metadata_iface *get_table_metadata_iface(const char *key) const { if (!strcmp(key, "mod_matrix")) return &mm_metadata; else return NULL; }
764 void get_configure_vars(std::vector<std::string> &names) const;
769 #endif