2 * Example audio modules - parameters and LADSPA wrapper instantiation
4 * Copyright (C) 2001-2008 Krzysztof Foltman
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General
17 * Public License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301 USA
25 #include <jack/jack.h>
27 #include <calf/giface.h>
28 #include <calf/metadata.h>
29 #include <calf/audio_fx.h>
32 using namespace calf_plugins
;
34 const char *calf_plugins::calf_copyright_info
= "(C) 2001-2009 Krzysztof Foltman, Thor Harald Johanssen, Markus Schmidt and others; license: LGPL";
36 ////////////////////////////////////////////////////////////////////////////
38 CALF_PORT_NAMES(flanger
) = {"In L", "In R", "Out L", "Out R"};
40 CALF_PORT_PROPS(flanger
) = {
41 { 0.1, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
| PF_PROP_GRAPH
, NULL
, "min_delay", "Min delay" },
42 { 0.5, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "mod_depth", "Mod depth" },
43 { 0.25, 0.01, 20, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "mod_rate", "Mod rate" },
44 { 0.90, -0.99, 0.99, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "feedback", "Feedback" },
45 { 0, 0, 360, 9, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "stereo", "Stereo phase" },
46 { 0, 0, 1, 2, PF_BOOL
| PF_CTL_BUTTON
, NULL
, "reset", "Reset" },
47 { 1, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "amount", "Amount" },
48 { 1.0, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "dry", "Dry Amount" },
51 CALF_PLUGIN_INFO(flanger
) = { 0x847d, "Flanger", "Calf Flanger", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "FlangerPlugin" };
53 ////////////////////////////////////////////////////////////////////////////
55 CALF_PORT_NAMES(phaser
) = {"In L", "In R", "Out L", "Out R"};
57 CALF_PORT_PROPS(phaser
) = {
58 { 1000, 20, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "base_freq", "Center Freq" },
59 { 4000, 0, 10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "mod_depth", "Mod depth" },
60 { 0.25, 0.01, 20, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "mod_rate", "Mod rate" },
61 { 0.25, -0.99, 0.99, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "feedback", "Feedback" },
62 { 6, 1, 12, 12, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "stages", "# Stages" },
63 { 180, 0, 360, 9, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "stereo", "Stereo phase" },
64 { 0, 0, 1, 2, PF_BOOL
| PF_CTL_BUTTON
, NULL
, "reset", "Reset" },
65 { 1, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "amount", "Amount" },
66 { 1.0, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "dry", "Dry Amount" },
69 CALF_PLUGIN_INFO(phaser
) = { 0x8484, "Phaser", "Calf Phaser", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "PhaserPlugin" };
71 ////////////////////////////////////////////////////////////////////////////
73 CALF_PORT_NAMES(reverb
) = {"In L", "In R", "Out L", "Out R"};
75 const char *reverb_room_sizes
[] = { "Small", "Medium", "Large", "Tunnel-like", "Large/smooth", "Experimental" };
77 CALF_PORT_PROPS(reverb
) = {
78 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip", "0dB" },
79 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_wet", "Wet amount" },
80 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_out", "Output" },
81 { 1.5, 0.4, 15.0, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_SEC
, NULL
, "decay_time", "Decay time" },
82 { 5000, 2000,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "hf_damp", "High Frq Damp" },
83 { 2, 0, 5, 0, PF_ENUM
| PF_CTL_COMBO
, reverb_room_sizes
, "room_size", "Room size", },
84 { 0.5, 0, 1, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "diffusion", "Diffusion" },
85 { 0.25, 0, 2, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "amount", "Wet Amount" },
86 { 1.0, 0, 2, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "dry", "Dry Amount" },
87 { 0, 0, 50, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "predelay", "Pre Delay" },
88 { 300, 20, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "bass_cut", "Bass Cut" },
89 { 5000, 20, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "treble_cut", "Treble Cut" },
92 CALF_PLUGIN_INFO(reverb
) = { 0x847e, "Reverb", "Calf Reverb", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "ReverbPlugin" };
94 ////////////////////////////////////////////////////////////////////////////
96 CALF_PORT_NAMES(filter
) = {"In L", "In R", "Out L", "Out R"};
98 const char *filter_choices
[] = {
108 "6dB/oct Bandreject",
109 "12dB/oct Bandreject",
110 "18dB/oct Bandreject",
113 CALF_PORT_PROPS(filter
) = {
114 { 2000, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq", "Frequency" },
115 { 0.707, 0.707, 32, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "res", "Resonance" },
116 { biquad_filter_module::mode_12db_lp
,
117 biquad_filter_module::mode_12db_lp
,
118 biquad_filter_module::mode_count
- 1,
119 1, PF_ENUM
| PF_CTL_COMBO
, filter_choices
, "mode", "Mode" },
120 { 20, 5, 100, 20, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "inertia", "Inertia"},
123 CALF_PLUGIN_INFO(filter
) = { 0x847f, "Filter", "Calf Filter", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "FilterPlugin" };
125 ////////////////////////////////////////////////////////////////////////////
127 CALF_PORT_NAMES(filterclavier
) = {"In L", "In R", "Out L", "Out R"};
129 CALF_PORT_PROPS(filterclavier
) = {
130 { 0, -48, 48, 48*2+1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_SEMITONES
, NULL
, "transpose", "Transpose" },
131 { 0, -100, 100, 0, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune", "Detune" },
132 { 32, 0.707, 32, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "maxres", "Max. Resonance" },
133 { biquad_filter_module::mode_6db_bp
,
134 biquad_filter_module::mode_12db_lp
,
135 biquad_filter_module::mode_count
- 1,
136 1, PF_ENUM
| PF_CTL_COMBO
| PF_PROP_GRAPH
, filter_choices
, "mode", "Mode" },
137 { 20, 1, 2000, 20, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "inertia", "Portamento time"}
140 CALF_PLUGIN_INFO(filterclavier
) = { 0x849f, "Filterclavier", "Calf Filterclavier", "Krzysztof Foltman / Hans Baier", calf_plugins::calf_copyright_info
, "FilterclavierPlugin" };
142 ////////////////////////////////////////////////////////////////////////////
144 CALF_PORT_NAMES(vintage_delay
) = {"In L", "In R", "Out L", "Out R"};
146 const char *vintage_delay_mixmodes
[] = {
151 const char *vintage_delay_fbmodes
[] = {
157 CALF_PORT_PROPS(vintage_delay
) = {
158 { 120, 30, 300, 1, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_BPM
, NULL
, "bpm", "Tempo" },
159 { 4, 1, 16, 1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "subdiv", "Subdivide"},
160 { 3, 1, 16, 1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "time_l", "Time L"},
161 { 5, 1, 16, 1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "time_r", "Time R"},
162 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "feedback", "Feedback" },
163 { 0.25, 0, 4, 100, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "amount", "Amount" },
164 { 1, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, vintage_delay_mixmodes
, "mix_mode", "Mix mode" },
165 { 1, 0, 2, 0, PF_ENUM
| PF_CTL_COMBO
, vintage_delay_fbmodes
, "medium", "Medium" },
166 { 1.0, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "dry", "Dry Amount" },
169 CALF_PLUGIN_INFO(vintage_delay
) = { 0x8482, "VintageDelay", "Calf Vintage Delay", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "DelayPlugin" };
171 ////////////////////////////////////////////////////////////////////////////
173 CALF_PORT_NAMES(rotary_speaker
) = {"In L", "In R", "Out L", "Out R"};
175 const char *rotary_speaker_speed_names
[] = { "Off", "Chorale", "Tremolo", "HoldPedal", "ModWheel", "Manual" };
177 CALF_PORT_PROPS(rotary_speaker
) = {
178 { 5, 0, 5, 1.01, PF_ENUM
| PF_CTL_COMBO
, rotary_speaker_speed_names
, "vib_speed", "Speed Mode" },
179 { 0.5, 0, 1, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "spacing", "Tap Spacing" },
180 { 0.5, 0, 1, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "shift", "Tap Offset" },
181 { 0.10, 0, 1, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "mod_depth", "Mod Depth" },
182 { 36, 10, 600, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_LOG
| PF_UNIT_RPM
, NULL
, "treble_speed", "Treble Motor" },
183 { 30, 10, 600, 0, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_LOG
| PF_UNIT_RPM
, NULL
, "bass_speed", "Bass Motor" },
184 { 0.7, 0, 1, 101, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "mic_distance", "Mic Distance" },
185 { 0.3, 0, 1, 101, PF_FLOAT
| PF_CTL_KNOB
| PF_SCALE_PERC
, NULL
, "reflection", "Reflection" },
186 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_l", "Low rotor" },
187 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_h", "High rotor" },
190 CALF_PLUGIN_INFO(rotary_speaker
) = { 0x8483, "RotarySpeaker", "Calf Rotary Speaker", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "SimulationPlugin" };
192 ////////////////////////////////////////////////////////////////////////////
194 CALF_PORT_NAMES(multichorus
) = {"In L", "In R", "Out L", "Out R"};
196 CALF_PORT_PROPS(multichorus
) = {
197 { 5, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
| PF_PROP_GRAPH
, NULL
, "min_delay", "Min delay" },
198 { 6, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
| PF_PROP_GRAPH
, NULL
, "mod_depth", "Mod depth" },
199 { 0.5, 0.01, 20, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "mod_rate", "Modulation rate" },
200 { 180, 0, 360, 91, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "stereo", "Stereo phase" },
201 { 4, 1, 8, 8, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "voices", "Voices"},
202 { 64, 0, 360, 91, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "vphase", "Inter-voice phase" },
203 { 2, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "amount", "Amount" },
204 { 1.0, 0, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "dry", "Dry Amount" },
205 { 100, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq", "Center Frq 1" },
206 { 5000, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq2", "Center Frq 2" },
207 { 0.125, 0.125, 8, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "q", "Q" },
208 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "overlap", "Overlap" },
211 CALF_PLUGIN_INFO(multichorus
) = { 0x8501, "MultiChorus", "Calf MultiChorus", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "ChorusPlugin" };
213 ////////////////////////////////////////////////////////////////////////////
215 CALF_PORT_NAMES(compressor
) = {"In L", "In R", "Out L", "Out R"};
217 const char *compressor_detection_names
[] = { "RMS", "Peak" };
218 const char *compressor_stereo_link_names
[] = { "Average", "Maximum" };
220 CALF_PORT_PROPS(compressor
) = {
221 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass", "Bypass" },
222 { 1, 0, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "level_in", "Input" },
223 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_in", "Input" },
224 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_out", "Output" },
225 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_in", "0dB-In" },
226 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_out", "0dB-Out" },
227 { 0.125, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold", "Threshold" },
228 { 2, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio", "Ratio" },
229 { 20, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack", "Attack" },
230 { 250, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release", "Release" },
231 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup", "Makeup Gain" },
232 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee", "Knee" },
233 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, compressor_detection_names
, "detection", "Detection" },
234 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, compressor_stereo_link_names
, "stereo_link", "Stereo Link" },
235 { 0, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression", "Reduction" },
238 CALF_PLUGIN_INFO(compressor
) = { 0x8502, "Compressor", "Calf Compressor", "Thor Harald Johansen", calf_plugins::calf_copyright_info
, "CompressorPlugin" };
240 ////////////////////////////////////////////////////////////////////////////
242 CALF_PORT_NAMES(sidechaincompressor
) = {"In L", "In R", "Out L", "Out R"};
244 const char *sidechaincompressor_detection_names
[] = { "RMS", "Peak" };
245 const char *sidechaincompressor_stereo_link_names
[] = { "Average", "Maximum" };
246 const char *sidechaincompressor_mode_names
[] = {"Wideband (F1:off / F2:off)",
247 "Deesser wide (F1:Bell / F2:HP)",
248 "Deesser split (F1:off / F2:HP)",
249 "Derumbler wide (F1:LP / F2:Bell)",
250 "Derumbler split (F1:LP / F2:off)",
251 "Weighted #1 (F1:Shelf / F2:Shelf)",
252 "Weighted #2 (F1:Shelf / F2:Bell)",
253 "Weighted #3 (F1:Bell / F2:Shelf)",
254 "Bandpass #1 (F1:BP / F2:off)",
255 "Bandpass #2 (F1:HP / F2:LP)"};
256 const char *sidechaincompressor_filter_choices
[] = { "12dB", "24dB", "36dB"};
259 CALF_PORT_PROPS(sidechaincompressor
) = {
260 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass", "Bypass" },
261 { 1, 0, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "level_in", "Input" },
262 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_in", "Input" },
263 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_out", "Output" },
264 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_in", "0dB-In" },
265 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_out", "0dB-Out" },
266 { 0.125, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold", "Threshold" },
267 { 2, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio", "Ratio" },
268 { 20, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack", "Attack" },
269 { 250, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release", "Release" },
270 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup", "Makeup Gain" },
271 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee", "Knee" },
272 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, sidechaincompressor_detection_names
, "detection", "Detection" },
273 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, sidechaincompressor_stereo_link_names
, "stereo_link", "Stereo Link" },
274 { 0, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression", "Gain Reduction" },
275 { 0, 0, 9, 0, PF_ENUM
| PF_CTL_COMBO
, sidechaincompressor_mode_names
, "sc_mode", "Sidechain Mode" },
276 { 250, 10,18000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "f1_freq", "F1 Freq" },
277 { 4500, 10,18000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "f2_freq", "F2 Freq" },
278 { 1, 0.0625, 16, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "f1_level", "F1 Level" },
279 { 1, 0.0625, 16, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "f2_level", "F2 Level" },
280 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "sc_listen", "S/C-Listen" },
281 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "f1_active", "F1 Active" },
282 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "f2_active", "F2 Active" },
285 CALF_PLUGIN_INFO(sidechaincompressor
) = { 0x8517, "Sidechaincompressor", "Calf Sidechain Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info
, "CompressorPlugin" };
287 ////////////////////////////////////////////////////////////////////////////
289 CALF_PORT_NAMES(multibandcompressor
) = {"In L", "In R", "Out L", "Out R"};
291 const char *multibandcompressor_detection_names
[] = { "RMS", "Peak" };
293 CALF_PORT_PROPS(multibandcompressor
) = {
294 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass", "Bypass" },
295 { 1, 0, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "level_in", "Input" },
296 { 1, 0, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "level_out", "Output" },
297 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_inL", "Input L" },
298 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_inR", "Input R" },
299 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_outL", "Output L" },
300 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "meter_outR", "Output R" },
301 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_inL", "0dB-InL" },
302 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_inR", "0dB-InR" },
303 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_outL", "0dB-OutL" },
304 { 0, 0, 1, 0, PF_FLOAT
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_outR", "0dB-OutR" },
306 { 100, 10, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq0", "Split 1/2" },
307 { 1000, 10, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq1", "Split 2/3" },
308 { 6000, 10, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "freq2", "Split 3/4" },
310 { -0.17, -0.5, 0.5, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_GRAPH
, NULL
, "sep0", "S1" },
311 { -0.17, -0.5, 0.5, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_GRAPH
, NULL
, "sep1", "S2" },
312 { -0.17, -0.5, 0.5, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_GRAPH
, NULL
, "sep2", "S3" },
314 { 0.895025, 0.25, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
| PF_PROP_GRAPH
, NULL
, "q0", "Q1" },
315 { 0.895025, 0.25, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
| PF_PROP_GRAPH
, NULL
, "q1", "Q2" },
316 { 0.895025, 0.25, 4, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
| PF_PROP_GRAPH
, NULL
, "q2", "Q3" },
319 { 0.0625, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold0", "Threshold 1" },
320 { 3, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio0", "Ratio 1" },
321 { 50, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack0", "Attack 1" },
322 { 100, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release0", "Release 1" },
323 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup0", "Makeup 1" },
324 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee0", "Knee 1" },
325 { 1, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, multibandcompressor_detection_names
, "detection0", "Detection 1" },
326 { 1, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression0", "Gain Reduction 1" },
327 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "output0", "Output 1" },
328 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass0", "Bypass 1" },
329 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "mute0", "Mute 1" },
332 { 0.03125, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold1", "Threshold 2" },
333 { 3, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio1", "Ratio 2" },
334 { 25, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack1", "Attack 2" },
335 { 50, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release1", "Release 2" },
336 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup1", "Makeup 2" },
337 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee1", "Knee 2" },
338 { 1, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, multibandcompressor_detection_names
, "detection1", "Detection 2" },
339 { 1, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression1", "Gain Reduction 2" },
340 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "output1", "Output 2" },
341 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass1", "Bypass 2" },
342 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "mute1", "Mute 2" },
345 { 0.015625, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold2", "Threshold 3" },
346 { 3, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio2", "Ratio 3" },
347 { 12.5, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack2", "Attack 3" },
348 { 25, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release2", "Release 3" },
349 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup2", "Makeup 3" },
350 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee2", "Knee 3" },
351 { 1, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, multibandcompressor_detection_names
, "detection2", "Detection 3" },
352 { 1, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression2", "Gain Reduction 3" },
353 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "output2", "Output 3" },
354 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass2", "Bypass 3" },
355 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "mute2", "Mute 3" },
358 { 0.0078125, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold3", "Threshold 4" },
359 { 3, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio3", "Ratio 4" },
360 { 6.25, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "attack3", "Attack 4" },
361 { 12.5, 0.01, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "release3", "Release 4" },
362 { 2, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup3", "Makeup 4" },
363 { 2.828427125, 1, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "knee3", "Knee 4" },
364 { 1, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, multibandcompressor_detection_names
, "detection3", "Detection 4" },
365 { 1, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression3", "Gain Reduction 4" },
366 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "output3", "Output 4" },
367 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass3", "Bypass 4" },
368 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "mute3", "Mute 4" },
371 CALF_PLUGIN_INFO(multibandcompressor
) = { 0x8516, "Multibandcompressor", "Calf Multiband Compressor", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info
, "CompressorPlugin" };
373 ////////////////////////////////////////////////////////////////////////////
375 CALF_PORT_NAMES(deesser
) = {"In L", "In R", "Out L", "Out R"};
377 const char *deesser_detection_names
[] = { "RMS", "Peak" };
378 const char *deesser_mode_names
[] = { "Wide", "Split" };
381 CALF_PORT_PROPS(deesser
) = {
382 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "bypass", "Bypass" },
383 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "detected", "Detected" },
384 { 0, 0.03125, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_METER
| PF_CTLO_LABEL
| PF_CTLO_REVERSE
| PF_UNIT_DB
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
| PF_PROP_GRAPH
, NULL
, "compression", "Gain Reduction" },
385 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "detected_led", "Active" },
386 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_LED
| PF_PROP_OUTPUT
| PF_PROP_OPTIONAL
, NULL
, "clip_out", "Out" },
387 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, deesser_detection_names
, "detection", "Detection" },
388 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, deesser_mode_names
, "mode", "Mode" },
389 { 0.125, 0.000976563, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "threshold", "Threshold" },
390 { 3, 1, 20, 21, PF_FLOAT
| PF_SCALE_LOG_INF
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "ratio", "Ratio" },
391 { 15, 1, 100, 1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "laxity", "Laxity" },
392 { 1, 1, 64, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "makeup", "Makeup" },
394 { 6000, 10, 18000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
| PF_PROP_GRAPH
, NULL
, "f1_freq", "Split" },
395 { 4500, 10, 18000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "f2_freq", "Peak" },
396 { 1, 0.0625, 16, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "f1_level", "Gain" },
397 { 4, 0.0625, 16, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_DB
, NULL
, "f2_level", "Level" },
398 { 1, 0.1, 100,1, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "f2_q", "Peak Q" },
399 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "sc_listen", "S/C-Listen" },
402 CALF_PLUGIN_INFO(deesser
) = { 0x8515, "Deesser", "Calf Deesser", "Markus Schmidt / Thor Harald Johansen", calf_plugins::calf_copyright_info
, "CompressorPlugin" };
404 ////////////////////////////////////////////////////////////////////////////
405 // A few macros to make
407 #define BYPASS_AND_LEVEL_PARAMS \
408 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "bypass", "Bypass" }, \
409 { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_in", "Input Gain" }, \
410 { 1, 0, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "level_out", "Output Gain" },
412 #define METERING_PARAMS \
413 { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inL", "Meter-InL" }, \
414 { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_inR", "Meter-InR" }, \
415 { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outL", "Meter-OutL" }, \
416 { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_outR", "Meter-OutR" }, \
417 { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inL", "0dB-InL" }, \
418 { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_inR", "0dB-InR" }, \
419 { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outL", "0dB-OutL" }, \
420 { 0, 0, 1, 0, PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" },
422 #define LPHP_PARAMS \
423 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hp_active", "HP Active" }, \
424 { 30, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hp_freq", "HP Freq" }, \
425 { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "hp_mode", "HP Mode" }, \
426 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "lp_active", "LP Active" }, \
427 { 18000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "lp_freq", "LP Freq" }, \
428 { 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, rolloff_mode_names, "lp_mode", "LP Mode" }, \
430 #define SHELF_PARAMS \
431 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "ls_active", "LS Active" }, \
432 { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "ls_level", "Level L" }, \
433 { 200, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "ls_freq", "Freq L" }, \
434 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "hs_active", "HS Active" }, \
435 { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "hs_level", "Level H" }, \
436 { 4000, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hs_freq", "Freq H" },
438 #define EQ_BAND_PARAMS(band, frequency) \
439 { 0, 0, 1, 0, PF_BOOL | PF_CTL_TOGGLE, NULL, "p" #band "_active", "F" #band " Active" }, \
440 { 1, 0.015625, 64, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "p" #band "_level", "Level " #band }, \
441 { frequency, 10, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "p" #band "_freq", "Freq " #band }, \
442 { 1, 0.1, 100, 1, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "p" #band "_q", "Q " #band },
444 ////////////////////////////////////////////////////////////////////////////
446 CALF_PORT_NAMES(equalizer5band
) = {"In L", "In R", "Out L", "Out R"};
448 CALF_PORT_PROPS(equalizer5band
) = {
449 BYPASS_AND_LEVEL_PARAMS
452 EQ_BAND_PARAMS(1, 250)
453 EQ_BAND_PARAMS(2, 1000)
454 EQ_BAND_PARAMS(3, 2500)
457 CALF_PLUGIN_INFO(equalizer5band
) = { 0x8511, "Equalizer5Band", "Calf Equalizer 5 Band", "Markus Schmidt", calf_plugins::calf_copyright_info
, "EqualizerPlugin" };
459 //////////////////////////////////////////////////////////////////////////////
462 CALF_PORT_NAMES(equalizer8band
) = {"In L", "In R", "Out L", "Out R"};
463 const char *rolloff_mode_names
[] = {"12dB/oct", "24dB/oct", "36dB/oct"};
465 CALF_PORT_PROPS(equalizer8band
) = {
466 BYPASS_AND_LEVEL_PARAMS
470 EQ_BAND_PARAMS(1, 250)
471 EQ_BAND_PARAMS(2, 1000)
472 EQ_BAND_PARAMS(3, 2500)
473 EQ_BAND_PARAMS(4, 5000)
476 CALF_PLUGIN_INFO(equalizer8band
) = { 0x8512, "Equalizer8Band", "Calf Equalizer 8 Band", "Markus Schmidt", calf_plugins::calf_copyright_info
, "EqualizerPlugin" };
478 ////////////////////////////////////////////////////////////////////////////
480 CALF_PORT_NAMES(equalizer12band
) = {"In L", "In R", "Out L", "Out R"};
482 CALF_PORT_PROPS(equalizer12band
) = {
483 BYPASS_AND_LEVEL_PARAMS
487 EQ_BAND_PARAMS(1, 60)
488 EQ_BAND_PARAMS(2, 120)
489 EQ_BAND_PARAMS(3, 250)
490 EQ_BAND_PARAMS(4, 500)
491 EQ_BAND_PARAMS(5, 1000)
492 EQ_BAND_PARAMS(6, 2500)
493 EQ_BAND_PARAMS(7, 4000)
494 EQ_BAND_PARAMS(8, 6000)
497 CALF_PLUGIN_INFO(equalizer12band
) = { 0x8513, "Equalizer12Band", "Calf Equalizer 12 Band", "Markus Schmidt", calf_plugins::calf_copyright_info
, "EqualizerPlugin" };
499 ////////////////////////////////////////////////////////////////////////////
501 CALF_PORT_NAMES(pulsator
) = {"In L", "In R", "Out L", "Out R"};
503 const char *pulsator_mode_names
[] = { "Sine", "Triangle", "Square", "Saw up", "Saw down" };
505 CALF_PORT_PROPS(pulsator
) = {
506 BYPASS_AND_LEVEL_PARAMS
508 { 0, 0, 4, 0, PF_ENUM
| PF_CTL_COMBO
, pulsator_mode_names
, "mode", "Mode" },
509 { 1, 0.01, 100, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "freq", "Frequency" },
510 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "amount", "Modulation" },
511 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "offset", "Offset L/R" },
512 { 0, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "mono", "Mono-in" },
513 { 0, 0, 1, 2, PF_BOOL
| PF_CTL_BUTTON
, NULL
, "reset", "Reset" },
516 CALF_PLUGIN_INFO(pulsator
) = { 0x8514, "Pulsator", "Calf Pulsator", "Markus Schmidt", calf_plugins::calf_copyright_info
, "ModulationPlugin" };
518 ////////////////////////////////////////////////////////////////////////////
520 ////////////////////////////////////////////////////////////////////////////
522 CALF_PORT_NAMES(monosynth
) = {
526 const char *monosynth_waveform_names
[] = { "Sawtooth", "Square", "Pulse", "Sine", "Triangle", "Varistep", "Skewed Saw", "Skewed Square",
527 "Smooth Brass", "Bass", "Dark FM", "Multiwave", "Bell FM", "Dark Pad", "DCO Saw", "DCO Maze" };
528 const char *monosynth_mode_names
[] = { "0 : 0", "0 : 180", "0 : 90", "90 : 90", "90 : 270", "Random" };
529 const char *monosynth_legato_names
[] = { "Retrig", "Legato", "Fng Retrig", "Fng Legato" };
531 const char *monosynth_filter_choices
[] = {
534 "2x12dB/oct Lowpass",
539 "2x6dB/oct Bandpass",
542 CALF_PLUGIN_INFO(monosynth
) = { 0x8480, "Monosynth", "Calf Monosynth", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "SynthesizerPlugin" };
544 CALF_PORT_PROPS(monosynth
) = {
545 { monosynth_metadata::wave_saw
, 0, monosynth_metadata::wave_count
- 1, 1, PF_ENUM
| PF_CTL_COMBO
| PF_PROP_GRAPH
, monosynth_waveform_names
, "o1_wave", "Osc1 Wave" },
546 { monosynth_metadata::wave_sqr
, 0, monosynth_metadata::wave_count
- 1, 1, PF_ENUM
| PF_CTL_COMBO
| PF_PROP_GRAPH
, monosynth_waveform_names
, "o2_wave", "Osc2 Wave" },
548 { 0, -1, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "o1_pw", "Osc1 PW" },
549 { 0, -1, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "o2_pw", "Osc2 PW" },
551 { 10, 0, 100, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "o12_detune", "O1<>2 Detune" },
552 { 12, -24, 24, 0, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_SEMITONES
, NULL
, "o2_xpose", "Osc 2 transpose" },
553 { 0, 0, 5, 0, PF_ENUM
| PF_CTL_COMBO
, monosynth_mode_names
, "phase_mode", "Phase mode" },
554 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "o12_mix", "O1<>2 Mix" },
555 { 1, 0, 7, 0, PF_ENUM
| PF_CTL_COMBO
| PF_PROP_GRAPH
, monosynth_filter_choices
, "filter", "Filter" },
556 { 33, 10,16000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "cutoff", "Cutoff" },
557 { 2, 0.7, 8, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
, NULL
, "res", "Resonance" },
558 { 0, -2400, 2400, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "filter_sep", "Separation" },
559 { 8000, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "env2cutoff", "Env->Cutoff" },
560 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "env2res", "Env->Res" },
561 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "env2amp", "Env->Amp" },
563 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_FADER
| PF_UNIT_MSEC
, NULL
, "adsr_a", "Attack" },
564 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_FADER
| PF_UNIT_MSEC
, NULL
, "adsr_d", "Decay" },
565 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr_s", "Sustain" },
566 { 0, -10000,10000, 21, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
| PF_UNIT_MSEC
, NULL
, "adsr_f", "Fade" },
567 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_FADER
| PF_UNIT_MSEC
, NULL
, "adsr_r", "Release" },
569 { 0, 0, 2, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "key_follow", "Key Follow" },
570 { 0, 0, 3, 0, PF_ENUM
| PF_CTL_COMBO
, monosynth_legato_names
, "legato", "Legato Mode" },
571 { 1, 1, 2000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "portamento", "Portamento" },
573 { 0.5, 0, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "vel2filter", "Vel->Filter" },
574 { 0, 0, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "vel2amp", "Vel->Amp" },
576 { 0.5, 0, 1, 100, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_PROP_OUTPUT_GAIN
, NULL
, "master", "Volume" },
578 { 200, 0, 2400, 25, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "pbend_range", "PBend Range" },
580 { 5, 0.01, 20, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "lfo_rate", "LFO Rate" },
581 { 0.5, 0.1, 5, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_SEC
, NULL
, "lfo_delay", "LFO Delay" },
582 { 0, -4800, 4800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "lfo2filter", "LFO->Filter" },
583 { 100, 0, 1200, 0, PF_FLOAT
| PF_SCALE_QUAD
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "lfo2pitch", "LFO->Pitch" },
584 { 0, 0, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "lfo2pw", "LFO->PW" },
585 { 1, 0, 1, 0.1, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "mwhl2lfo", "ModWheel->LFO" },
587 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "scale_detune", "Scale Detune" },
590 ////////////////////////////////////////////////////////////////////////////
592 CALF_PLUGIN_INFO(organ
) = { 0x8481, "Organ", "Calf Organ", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "SynthesizerPlugin" };
594 const char **organ_metadata::get_default_configure_vars()
596 static const char *data
[] = { "map_curve", "2\n0 1\n1 1\n", NULL
};
600 plugin_command_info
*organ_metadata::get_commands()
602 static plugin_command_info cmds
[] = {
603 { "cmd_panic", "Panic!", "Stop all sounds and reset all controllers" },
609 CALF_PORT_NAMES(organ
) = {"Out L", "Out R"};
611 const char *organ_percussion_trigger_names
[] = { "First note", "Each note", "Each, no retrig", "Polyphonic" };
613 const char *organ_wave_names
[] = {
616 "SSaw", "SSqr", "SPls",
618 "S(", "Sq(", "S+", "Clvg",
620 "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9",
621 "DSaw", "DSqr", "DPls",
622 "P:SynStr","P:WideStr","P:Sine","P:Bell","P:Space","P:Voice","P:Hiss","P:Chant",
625 const char *organ_routing_names
[] = { "Out", "Flt 1", "Flt 2" };
627 const char *organ_ampctl_names
[] = { "None", "Direct", "Flt 1", "Flt 2", "All" };
629 const char *organ_vibrato_mode_names
[] = { "None", "Direct", "Flt 1", "Flt 2", "Voice", "Global" };
631 const char *organ_filter_type_names
[] = { "12dB/oct LP", "12dB/oct HP" };
633 const char *organ_filter_send_names
[] = { "Output", "Filter 2" };
635 const char *organ_init_map_curve
= "2\n0 1\n1 1\n";
637 CALF_PORT_PROPS(organ
) = {
638 { 8, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l1", "16'" },
639 { 8, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l2", "5 1/3'" },
640 { 8, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l3", "8'" },
641 { 0, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l4", "4'" },
642 { 0, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l5", "2 2/3'" },
643 { 0, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l6", "2'" },
644 { 0, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l7", "1 3/5'" },
645 { 0, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l8", "1 1/3'" },
646 { 8, 0, 8, 80, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_FADER
, NULL
, "l9", "1'" },
648 { 1, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f1", "Freq 1" },
649 { 3, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f2", "Freq 2" },
650 { 2, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f3", "Freq 3" },
651 { 4, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f4", "Freq 4" },
652 { 6, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f5", "Freq 5" },
653 { 8, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f6", "Freq 6" },
654 { 10, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f7", "Freq 7" },
655 { 12, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f8", "Freq 8" },
656 { 16, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "f9", "Freq 9" },
658 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w1", "Wave 1" },
659 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w2", "Wave 2" },
660 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w3", "Wave 3" },
661 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w4", "Wave 4" },
662 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w5", "Wave 5" },
663 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w6", "Wave 6" },
664 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w7", "Wave 7" },
665 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w8", "Wave 8" },
666 { 0, 0, organ_enums::wave_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_wave_names
, "w9", "Wave 9" },
668 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune1", "Detune 1" },
669 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune2", "Detune 2" },
670 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune3", "Detune 3" },
671 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune4", "Detune 4" },
672 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune5", "Detune 5" },
673 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune6", "Detune 6" },
674 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune7", "Detune 7" },
675 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune8", "Detune 8" },
676 { 0, -100,100, 401, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune9", "Detune 9" },
678 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase1", "Phase 1" },
679 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase2", "Phase 2" },
680 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase3", "Phase 3" },
681 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase4", "Phase 4" },
682 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase5", "Phase 5" },
683 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase6", "Phase 6" },
684 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase7", "Phase 7" },
685 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase8", "Phase 8" },
686 { 0, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "phase9", "Phase 9" },
688 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan1", "Pan 1" },
689 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan2", "Pan 2" },
690 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan3", "Pan 3" },
691 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan4", "Pan 4" },
692 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan5", "Pan 5" },
693 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan6", "Pan 6" },
694 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan7", "Pan 7" },
695 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan8", "Pan 8" },
696 { 0, -1, 1, 201, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "pan9", "Pan 9" },
698 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing1", "Routing 1" },
699 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing2", "Routing 2" },
700 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing3", "Routing 3" },
701 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing4", "Routing 4" },
702 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing5", "Routing 5" },
703 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing6", "Routing 6" },
704 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing7", "Routing 7" },
705 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing8", "Routing 8" },
706 { 0, 0, 2, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, organ_routing_names
, "routing9", "Routing 9" },
708 { 96, 0, 127, 128, PF_INT
| PF_CTL_KNOB
| PF_UNIT_NOTE
, NULL
, "foldnote", "Foldover" },
710 { 200, 10, 3000, 100, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "perc_decay", "P: Carrier Decay" },
711 { 0.25, 0, 1, 100, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
, NULL
, "perc_level", "P: Level" },
712 { 0, 0, organ_enums::wave_count_small
- 1, 1, PF_ENUM
| PF_CTL_COMBO
, organ_wave_names
, "perc_waveform", "P: Carrier Wave" },
713 { 6, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "perc_harmonic", "P: Carrier Frq" },
714 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "perc_vel2amp", "P: Vel->Amp" },
716 { 200, 10, 3000, 100, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "perc_fm_decay", "P: Modulator Decay" },
717 { 0, 0, 4, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "perc_fm_depth", "P: FM Depth" },
718 { 0, 0, organ_enums::wave_count_small
- 1, 1, PF_ENUM
| PF_CTL_COMBO
, organ_wave_names
, "perc_fm_waveform", "P: Modulator Wave" },
719 { 6, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "perc_fm_harmonic", "P: Modulator Frq" },
720 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "perc_vel2fm", "P: Vel->FM" },
722 { 0, 0, organ_enums::perctrig_count
- 1, 0, PF_ENUM
| PF_CTL_COMBO
, organ_percussion_trigger_names
, "perc_trigger", "P: Trigger" },
723 { 90, 0,360, 361, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "perc_stereo", "P: Stereo Phase" },
725 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, organ_filter_send_names
, "filter_chain", "Filter 1 To" },
726 { 0, 0, 1, 0, PF_ENUM
| PF_CTL_COMBO
, organ_filter_type_names
, "filter1_type", "Filter 1 Type" },
727 { 0.1, 0, 1, 100, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_PROP_OUTPUT_GAIN
| PF_PROP_GRAPH
, NULL
, "master", "Volume" },
729 { 2000, 20, 20000, 100, PF_FLOAT
| PF_SCALE_LOG
| PF_UNIT_HZ
| PF_CTL_KNOB
, NULL
, "f1_cutoff", "F1 Cutoff" },
730 { 2, 0.7, 8, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
, NULL
, "f1_res", "F1 Res" },
731 { 8000, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f1_env1", "F1 Env1" },
732 { 0, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f1_env2", "F1 Env2" },
733 { 0, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f1_env3", "F1 Env3" },
734 { 0, 0, 2, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "f1_keyf", "F1 KeyFollow" },
736 { 2000, 20, 20000, 100, PF_FLOAT
| PF_SCALE_LOG
| PF_UNIT_HZ
| PF_CTL_KNOB
, NULL
, "f2_cutoff", "F2 Cutoff" },
737 { 2, 0.7, 8, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
, NULL
, "f2_res", "F2 Res" },
738 { 0, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f2_env1", "F2 Env1" },
739 { 8000, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f2_env2", "F2 Env2" },
740 { 0, -10800,10800, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "f2_env3", "F2 Env3" },
741 { 0, 0, 2, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "f2_keyf", "F2 KeyFollow" },
743 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_a", "EG1 Attack" },
744 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_d", "EG1 Decay" },
745 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr_s", "EG1 Sustain" },
746 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_r", "EG1 Release" },
747 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr_v", "EG1 VelMod" },
748 { 0, 0, organ_enums::ampctl_count
- 1,
749 0, PF_INT
| PF_CTL_COMBO
, organ_ampctl_names
, "eg1_amp_ctl", "EG1 To Amp"},
751 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_a", "EG2 Attack" },
752 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_d", "EG2 Decay" },
753 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr2_s", "EG2 Sustain" },
754 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_r", "EG2 Release" },
755 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr2_v", "EG2 VelMod" },
756 { 0, 0, organ_enums::ampctl_count
- 1,
757 0, PF_INT
| PF_CTL_COMBO
, organ_ampctl_names
, "eg2_amp_ctl", "EG2 To Amp"},
759 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_a", "EG3 Attack" },
760 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_d", "EG3 Decay" },
761 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr3_s", "EG3 Sustain" },
762 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_r", "EG3 Release" },
763 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr3_v", "EG3 VelMod" },
764 { 0, 0, organ_enums::ampctl_count
- 1,
765 0, PF_INT
| PF_CTL_COMBO
, organ_ampctl_names
, "eg3_amp_ctl", "EG3 To Amp"},
767 { 6.6, 0.01, 80, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "vib_rate", "Vib Rate" },
768 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "vib_amt", "Vib Mod Amt" },
769 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
, NULL
, "vib_wet", "Vib Wet" },
770 { 180, 0, 360, 0, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_DEG
, NULL
, "vib_phase", "Vib Stereo" },
771 { organ_enums::lfomode_global
, 0, organ_enums::lfomode_count
- 1, 0, PF_ENUM
| PF_CTL_COMBO
, organ_vibrato_mode_names
, "vib_mode", "Vib Mode" },
772 // { 0, 0, organ_enums::ampctl_count - 1,
773 // 0, PF_INT | PF_CTL_COMBO, organ_ampctl_names, "vel_amp_ctl", "Vel To Amp"},
775 { -12, -24, 24, 49, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_SEMITONES
, NULL
, "transpose", "Transpose" },
776 { 0, -100, 100, 201, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "detune", "Detune" },
778 { 16, 1, 32, 32, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
, NULL
, "polyphony", "Polyphony" },
780 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "quad_env", "Quadratic AmpEnv" },
782 { 200, 0, 2400, 25, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "pbend_range", "PBend Range" },
784 { 80, 20, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "bass_freq", "Bass Freq" },
785 { 1, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "bass_gain", "Bass Gain" },
786 { 12000, 20, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_HZ
, NULL
, "treble_freq", "Treble Freq" },
787 { 1, 0.1, 10, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "treble_gain", "Treble Gain" },
789 { 0, 0, 0, 0, PF_STRING
| PF_PROP_MSGCONTEXT
, &organ_init_map_curve
, "map_curve", "Key mapping curve" },
792 ////////////////////////////////////////////////////////////////////////////
794 const char *fluidsynth_init_soundfont
= "";
796 const char *fluidsynth_interpolation_names
[] = { "None (zero-hold)", "Linear", "Cubic", "7-point" };
798 CALF_PORT_NAMES(fluidsynth
) = {
802 CALF_PLUGIN_INFO(fluidsynth
) = { 0x8700, "Fluidsynth", "Calf Fluidsynth", "FluidSynth Team / Krzysztof Foltman", calf_plugins::calf_copyright_info
, "SynthesizerPlugin" };
804 CALF_PORT_PROPS(fluidsynth
) = {
805 { 0.5, 0, 1, 100, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_PROP_OUTPUT_GAIN
, NULL
, "master", "Volume" },
806 { 0, 0, 0, 0, PF_STRING
| PF_PROP_MSGCONTEXT
, &fluidsynth_init_soundfont
, "soundfont", "Soundfont" },
807 { 2, 0, 3, 0, PF_ENUM
| PF_CTL_COMBO
, fluidsynth_interpolation_names
, "interpolation", "Interpolation" },
808 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "reverb", "Reverb" },
809 { 1, 0, 1, 0, PF_BOOL
| PF_CTL_TOGGLE
, NULL
, "chorus", "Chorus" },
812 ////////////////////////////////////////////////////////////////////////////
814 const char *wavetable_names
[] = {
846 const char *wavetable_init_soundfont
= "";
848 CALF_PORT_NAMES(wavetable
) = {
852 CALF_PLUGIN_INFO(wavetable
) = { 0x8701, "Wavetable", "Calf Wavetable", "Krzysztof Foltman", calf_plugins::calf_copyright_info
, "SynthesizerPlugin" };
854 CALF_PORT_PROPS(wavetable
) = {
855 { wavetable_metadata::wt_count
- 1, 0, wavetable_metadata::wt_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, wavetable_names
, "o1wave", "Osc1 Wave" },
856 { 0.2, -1, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "o1offset", "Osc1 Ctl"},
857 { 0, -48, 48, 48*2+1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_SEMITONES
, NULL
, "o1trans", "Osc1 Transpose" },
858 { 6, -100, 100, 0, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "o1detune", "Osc1 Detune" },
859 { 0.1, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "o1level", "Osc1 Level" },
861 { 0, 0, wavetable_metadata::wt_count
- 1, 0, PF_ENUM
| PF_SCALE_LINEAR
| PF_CTL_COMBO
, wavetable_names
, "o2wave", "Osc2 Wave" },
862 { 0.4, -1, 1, 0, PF_FLOAT
| PF_SCALE_PERC
| PF_CTL_KNOB
| PF_UNIT_COEF
, NULL
, "o2offset", "Osc2 Ctl"},
863 { 0, -48, 48, 48*2+1, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_SEMITONES
, NULL
, "o2trans", "Osc2 Transpose" },
864 { -6, -100, 100, 0, PF_INT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "o2detune", "Osc2 Detune" },
865 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_GAIN
| PF_CTL_KNOB
| PF_UNIT_COEF
| PF_PROP_NOBOUNDS
, NULL
, "o2level", "Osc2 Level" },
867 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_a", "EG1 Attack" },
868 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_d", "EG1 Decay" },
869 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr_s", "EG1 Sustain" },
870 { 0, -10000,10000, 21, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_f", "EG1 Fade" },
871 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr_r", "EG1 Release" },
872 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr_v", "EG1 VelMod" },
874 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_a", "EG2 Attack" },
875 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_d", "EG2 Decay" },
876 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr2_s", "EG2 Sustain" },
877 { 0, -10000,10000, 21, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_f", "EG2 Fade" },
878 { 50, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr2_r", "EG2 Release" },
879 { 1, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr2_v", "EG2 VelMod" },
881 { 1, 1,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_a", "EG3 Attack" },
882 { 350, 10,20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_d", "EG3 Decay" },
883 { 0.5, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr3_s", "EG3 Sustain" },
884 { 0, -10000,10000, 21, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_f", "EG3 Fade" },
885 { 50, 10, 20000, 0, PF_FLOAT
| PF_SCALE_LOG
| PF_CTL_KNOB
| PF_UNIT_MSEC
, NULL
, "adsr3_r", "EG3 Release" },
886 { 0, 0, 1, 0, PF_FLOAT
| PF_SCALE_PERC
, NULL
, "adsr3_v", "EG3 VelMod" },
888 { 200, 0, 2400, 25, PF_FLOAT
| PF_SCALE_LINEAR
| PF_CTL_KNOB
| PF_UNIT_CENTS
, NULL
, "pbend_range", "PBend Range" },
891 ////////////////////////////////////////////////////////////////////////////
893 void calf_plugins::get_all_plugins(std::vector
<plugin_metadata_iface
*> &plugins
)
895 #define PER_MODULE_ITEM(name, isSynth, jackname) plugins.push_back(new name##_metadata);
896 #define PER_SMALL_MODULE_ITEM(...)
897 #include <calf/modulelist.h>