+ Monosynth: Osc Mix modulation destination, use smoothing for xfade value, destinati...
[calf.git] / src / calf / metadata.h
blob8f4a60a8574ad8e85449ea35b044c580eab251d0
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 namespace calf_plugins {
30 struct flanger_metadata: public plugin_metadata<flanger_metadata>
32 public:
33 enum { par_delay, par_depth, par_rate, par_fb, par_stereo, par_reset, par_amount, par_dryamount, param_count };
34 enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
35 PLUGIN_NAME_ID_LABEL("flanger", "flanger", "Flanger")
38 struct phaser_metadata: public plugin_metadata<phaser_metadata>
40 enum { par_freq, par_depth, par_rate, par_fb, par_stages, par_stereo, par_reset, par_amount, par_dryamount, param_count };
41 enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
42 PLUGIN_NAME_ID_LABEL("phaser", "phaser", "Phaser")
45 struct filter_metadata: public plugin_metadata<filter_metadata>
47 enum { par_cutoff, par_resonance, par_mode, par_inertia, param_count };
48 enum { in_count = 2, out_count = 2, rt_capable = true, require_midi = false, support_midi = false };
49 PLUGIN_NAME_ID_LABEL("filter", "filter", "Filter")
50 /// do not export mode and inertia as CVs, as those are settings and not parameters
51 bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
54 /// Filterclavier - metadata
55 struct filterclavier_metadata: public plugin_metadata<filterclavier_metadata>
57 enum { par_transpose, par_detune, par_max_resonance, par_mode, par_inertia, param_count };
58 enum { in_count = 2, out_count = 2, rt_capable = true, require_midi = true, support_midi = true };
59 PLUGIN_NAME_ID_LABEL("filterclavier", "filterclavier", "Filterclavier")
60 /// do not export mode and inertia as CVs, as those are settings and not parameters
61 bool is_cv(int param_no) { return param_no != par_mode && param_no != par_inertia; }
64 struct reverb_metadata: public plugin_metadata<reverb_metadata>
66 enum { par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count };
67 enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
68 PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb")
71 struct vintage_delay_metadata: public plugin_metadata<vintage_delay_metadata>
73 enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, param_count };
74 enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false, require_midi = false };
75 PLUGIN_NAME_ID_LABEL("vintage_delay", "vintagedelay", "Vintage Delay")
78 struct rotary_speaker_metadata: public plugin_metadata<rotary_speaker_metadata>
80 public:
81 enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, param_count };
82 enum { in_count = 2, out_count = 2, support_midi = true, require_midi = false, rt_capable = true };
83 PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker")
86 /// A multitap stereo chorus thing - metadata
87 struct multichorus_metadata: public plugin_metadata<multichorus_metadata>
89 public:
90 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 };
91 enum { in_count = 2, out_count = 2, rt_capable = true, support_midi = false, require_midi = false };
92 PLUGIN_NAME_ID_LABEL("multichorus", "multichorus", "Multi Chorus")
95 /// Monosynth - metadata
96 struct monosynth_metadata: public plugin_metadata<monosynth_metadata>
98 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 };
99 enum { flt_lp12, flt_lp24, flt_2lp12, flt_hp12, flt_lpbr, flt_hpbr, flt_bp6, flt_2bp6 };
100 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_envmod, par_envtores, par_envtoamp, par_attack, par_decay, par_sustain, par_fade, par_release,
101 par_keyfollow, par_legato, par_portamento, par_vel2filter, par_vel2amp, par_master, par_pwhlrange,
102 par_lforate, par_lfodelay, par_lfofilter, par_lfopitch, par_lfopw, par_mwhl_lfo, par_scaledetune,
103 param_count };
104 enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
105 enum { step_size = 64, step_shift = 6 };
106 enum {
107 modsrc_none,
108 modsrc_velocity,
109 modsrc_pressure,
110 modsrc_modwheel,
111 modsrc_env1,
112 modsrc_lfo1,
113 modsrc_count,
115 enum {
116 moddest_none,
117 moddest_attenuation,
118 moddest_oscmix,
119 moddest_cutoff,
120 moddest_resonance,
121 moddest_o1detune,
122 moddest_o2detune,
123 moddest_o1pw,
124 moddest_o2pw,
125 moddest_count,
127 PLUGIN_NAME_ID_LABEL("monosynth", "monosynth", "Monosynth")
130 /// Thor's compressor - metadata
131 struct compressor_metadata: public plugin_metadata<compressor_metadata>
133 enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
134 enum { param_threshold, param_ratio, param_attack, param_release, param_makeup, param_knee, param_detection, param_stereo_link, param_aweighting, param_compression, param_peak, param_clip, param_bypass, // param_freq, param_bw,
135 param_count };
136 PLUGIN_NAME_ID_LABEL("compressor", "compressor", "Compressor")
139 /// Organ - enums for parameter IDs etc. (this mess is caused by organ split between plugin and generic class - which was
140 /// a bad design decision and should be sorted out some day) XXXKF @todo
141 struct organ_enums
143 enum {
144 par_drawbar1, par_drawbar2, par_drawbar3, par_drawbar4, par_drawbar5, par_drawbar6, par_drawbar7, par_drawbar8, par_drawbar9,
145 par_frequency1, par_frequency2, par_frequency3, par_frequency4, par_frequency5, par_frequency6, par_frequency7, par_frequency8, par_frequency9,
146 par_waveform1, par_waveform2, par_waveform3, par_waveform4, par_waveform5, par_waveform6, par_waveform7, par_waveform8, par_waveform9,
147 par_detune1, par_detune2, par_detune3, par_detune4, par_detune5, par_detune6, par_detune7, par_detune8, par_detune9,
148 par_phase1, par_phase2, par_phase3, par_phase4, par_phase5, par_phase6, par_phase7, par_phase8, par_phase9,
149 par_pan1, par_pan2, par_pan3, par_pan4, par_pan5, par_pan6, par_pan7, par_pan8, par_pan9,
150 par_routing1, par_routing2, par_routing3, par_routing4, par_routing5, par_routing6, par_routing7, par_routing8, par_routing9,
151 par_foldover,
152 par_percdecay, par_perclevel, par_percwave, par_percharm, par_percvel2amp,
153 par_percfmdecay, par_percfmdepth, par_percfmwave, par_percfmharm, par_percvel2fm,
154 par_perctrigger, par_percstereo,
155 par_filterchain,
156 par_filter1type,
157 par_master,
158 par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf,
159 par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf,
160 par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl, par_eg1ampctl,
161 par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl, par_eg2ampctl,
162 par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl, par_eg3ampctl,
163 par_lforate, par_lfoamt, par_lfowet, par_lfophase, par_lfomode,
164 par_transpose, par_detune,
165 par_polyphony,
166 par_quadenv,
167 par_pwhlrange,
168 par_bassfreq,
169 par_bassgain,
170 par_treblefreq,
171 par_treblegain,
172 par_var_mapcurve,
173 param_count
175 enum {
176 var_count = 1
178 enum organ_waveform {
179 wave_sine,
180 wave_sinepl1, wave_sinepl2, wave_sinepl3,
181 wave_ssaw, wave_ssqr, wave_spls, wave_saw, wave_sqr, wave_pulse, wave_sinepl05, wave_sqr05, wave_halfsin, wave_clvg, wave_bell, wave_bell2,
182 wave_w1, wave_w2, wave_w3, wave_w4, wave_w5, wave_w6, wave_w7, wave_w8, wave_w9,
183 wave_dsaw, wave_dsqr, wave_dpls,
184 wave_count_small,
185 wave_strings = wave_count_small,
186 wave_strings2,
187 wave_sinepad,
188 wave_bellpad,
189 wave_space,
190 wave_choir,
191 wave_choir2,
192 wave_choir3,
193 wave_count,
194 wave_count_big = wave_count - wave_count_small
196 enum {
197 ampctl_none,
198 ampctl_direct,
199 ampctl_f1,
200 ampctl_f2,
201 ampctl_all,
202 ampctl_count
204 enum {
205 lfomode_off = 0,
206 lfomode_direct,
207 lfomode_filter1,
208 lfomode_filter2,
209 lfomode_voice,
210 lfomode_global,
211 lfomode_count
213 enum {
214 perctrig_first = 0,
215 perctrig_each,
216 perctrig_eachplus,
217 perctrig_polyphonic,
218 perctrig_count
222 /// Organ - metadata
223 struct organ_metadata: public organ_enums, public plugin_metadata<organ_metadata>
225 enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
226 PLUGIN_NAME_ID_LABEL("organ", "organ", "Organ")
227 plugin_command_info *get_commands();
228 const char **get_default_configure_vars();
231 /// FluidSynth - metadata
232 struct fluidsynth_metadata: public plugin_metadata<fluidsynth_metadata>
234 enum { par_master, par_soundfont, par_interpolation, par_reverb, par_chorus, param_count };
235 enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = false };
236 PLUGIN_NAME_ID_LABEL("fluidsynth", "fluidsynth", "Fluidsynth")
237 const char **get_default_configure_vars();
240 /// Wavetable - metadata
241 struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
243 enum {
244 wt_fmshiny,
245 wt_fmshiny2,
246 wt_rezo,
247 wt_metal,
248 wt_bell,
249 wt_blah,
250 wt_pluck,
251 wt_stretch,
252 wt_stretch2,
253 wt_hardsync,
254 wt_hardsync2,
255 wt_softsync,
256 wt_bell2,
257 wt_bell3,
258 wt_tine,
259 wt_tine2,
260 wt_clav,
261 wt_clav2,
262 wt_gtr,
263 wt_gtr2,
264 wt_gtr3,
265 wt_gtr4,
266 wt_gtr5,
267 wt_reed,
268 wt_reed2,
269 wt_silver,
270 wt_brass,
271 wt_multi,
272 wt_multi2,
273 wt_count
275 enum {
276 modsrc_none,
277 modsrc_env1,
278 modsrc_env2,
279 modsrc_env3,
280 modsrc_velocity,
281 modsrc_modwheel,
282 modsrc_count,
284 enum {
285 moddest_none,
286 moddest_o1shift,
287 moddest_o2shift,
288 moddest_o1detune,
289 moddest_o2detune,
290 moddest_o1pitch,
291 moddest_o2pitch,
292 moddest_dca,
293 moddest_count,
295 enum {
296 par_o1wave, par_o1offset, par_o1transpose, par_o1detune, par_o1level,
297 par_o2wave, par_o2offset, par_o2transpose, par_o2detune, par_o2level,
298 par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1fade, par_eg1release, par_eg1velscl,
299 par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2fade, par_eg2release, par_eg2velscl,
300 par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3fade, par_eg3release, par_eg3velscl,
301 param_count };
302 enum { in_count = 0, out_count = 2, support_midi = true, require_midi = true, rt_capable = true };
303 enum { step_size = 64 };
304 PLUGIN_NAME_ID_LABEL("wavetable", "wavetable", "Wavetable")
309 #endif