1 /* 2 * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/> 3 * (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com> 4 * 5 * This file is part of lsp-plugins 6 * Created on: 30 мая 2016 г. 7 * 8 * lsp-plugins is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * any later version. 12 * 13 * lsp-plugins is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public License 19 * along with lsp-plugins. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 22 #include <core/types.h> 23 #include <metadata/plugins.h> 24 #include <metadata/ports.h> 25 #include <metadata/developers.h> 26 27 namespace lsp 28 { 29 //------------------------------------------------------------------------- 30 // Parametric Equalizer 31 static const int para_equalizer_classes[] = { C_PARA_EQ, -1 }; 32 33 static const port_item_t filter_slopes[] = 34 { 35 { "x1", "eq.slope.x1" }, 36 { "x2", "eq.slope.x2" }, 37 { "x3", "eq.slope.x3" }, 38 { "x4", "eq.slope.x4" }, 39 { NULL, NULL } 40 }; 41 42 static const port_item_t equalizer_eq_modes[] = 43 { 44 { "IIR", "eq.type.iir" }, 45 { "FIR", "eq.type.fir" }, 46 { "FFT", "eq.type.fft" }, 47 { "SPM", "eq.type.spm" }, 48 { NULL, NULL } 49 }; 50 51 static const port_item_t filter_types[] = 52 { 53 { "Off", "eq.flt.off" }, 54 { "Bell", "eq.flt.bell" }, 55 { "Hi-pass", "eq.flt.hipass" }, 56 { "Hi-shelf", "eq.flt.hishelf" }, 57 { "Lo-pass", "eq.flt.lopass" }, 58 { "Lo-shelf", "eq.flt.loshelf" }, 59 { "Notch", "eq.flt.notch" }, 60 { "Resonance", "eq.flt.resonance" }, 61 { "Allpass", "eq.flt.allpass" }, 62 63 // Additional stuff 64 #ifndef LSP_NO_EXPERIMENTAL 65 { "Allpass2", "eq.flt.allpass2" }, 66 { "Ladder-pass", "eq.flt.ladpass" }, 67 { "Ladder-rej", "eq.flt.ladrej" }, 68 { "Envelope", "eq.flt.envelope" }, 69 { "Bandpass", "eq.flt.bandpass" }, 70 #endif /* LSP_NO_EXPERIMENTAL */ 71 { NULL, NULL } 72 }; 73 74 static const port_item_t filter_modes[] = 75 { 76 { "RLC (BT)", "eq.mode.rlc_bt" }, 77 { "RLC (MT)", "eq.mode.rlc_mt" }, 78 { "BWC (BT)", "eq.mode.bwc_bt" }, 79 { "BWC (MT)", "eq.mode.bwc_mt" }, 80 { "LRX (BT)", "eq.mode.lrx_bt" }, 81 { "LRX (MT)", "eq.mode.lrx_mt" }, 82 { "APO (DR)", "eq.mode.apo_dr" }, 83 { NULL, NULL } 84 }; 85 86 static const port_item_t equalizer_fft_mode[] = 87 { 88 { "Off", "metering.fft.off" }, 89 { "Post-eq", "metering.fft.post_eq" }, 90 { "Pre-eq", "metering.fft.pre_eq" }, 91 { NULL, NULL } 92 }; 93 94 static const port_item_t filter_select_16[] = 95 { 96 { "Filters 0-7", "para_eq.flt_0:7" }, 97 { "Filters 8-15", "para_eq.flt_8:15" }, 98 { NULL, NULL } 99 }; 100 101 static const port_item_t filter_select_16lr[] = 102 { 103 { "Filters Left 0-7", "para_eq.flt_l_0:7" }, 104 { "Filters Right 0-7", "para_eq.flt_r_0:7" }, 105 { "Filters Left 8-15", "para_eq.flt_l_8:15" }, 106 { "Filters Right 8-15", "para_eq.flt_r_8:15" }, 107 { NULL, NULL } 108 }; 109 110 static const port_item_t filter_select_16ms[] = 111 { 112 { "Filters Middle 0-7", "para_eq.flt_m_0:7" }, 113 { "Filters Side 0-7", "para_eq.flt_s_0:7" }, 114 { "Filters Middle 8-15", "para_eq.flt_m_8:15" }, 115 { "Filters Side 8-15", "para_eq.flt_s_8:15" }, 116 { NULL, NULL } 117 }; 118 119 static const port_item_t filter_select_32[] = 120 { 121 { "Filters 0-7", "para_eq.flt_0:7" }, 122 { "Filters 8-15", "para_eq.flt_8:15" }, 123 { "Filters 16-23", "para_eq.flt_16:23" }, 124 { "Filters 24-31", "para_eq.flt_24:31" }, 125 { NULL, NULL } 126 }; 127 128 static const port_item_t filter_select_32lr[] = 129 { 130 { "Filters Left 0-7", "para_eq.flt_l_0:7" }, 131 { "Filters Right 0-7", "para_eq.flt_r_0:7" }, 132 { "Filters Left 8-15", "para_eq.flt_l_8:15" }, 133 { "Filters Right 8-15", "para_eq.flt_r_8:15" }, 134 { "Filters Left 16-23", "para_eq.flt_l_16:23" }, 135 { "Filters Right 16-23", "para_eq.flt_r_16:23" }, 136 { "Filters Left 24-31", "para_eq.flt_l_24:31" }, 137 { "Filters Right 24-31", "para_eq.flt_r_24:31" }, 138 { NULL, NULL } 139 }; 140 141 static const port_item_t filter_select_32ms[] = 142 { 143 { "Filters Middle 0-7", "para_eq.flt_m_0:7" }, 144 { "Filters Side 0-7", "para_eq.flt_s_0:7" }, 145 { "Filters Middle 8-15", "para_eq.flt_m_8:15" }, 146 { "Filters Side 8-15", "para_eq.flt_s_8:15" }, 147 { "Filters Mid 16-23", "para_eq.flt_m_16:23" }, 148 { "Filters Side 16-23", "para_eq.flt_s_16:23" }, 149 { "Filters Mid 24-31", "para_eq.flt_m_24:31" }, 150 { "Filters Side 24-31", "para_eq.flt_s_24:31" }, 151 { NULL, NULL } 152 }; 153 154 #define EQ_FILTER(id, label, x, total, f) \ 155 COMBO("ft" id "_" #x, "Filter type " label #x, 0, filter_types), \ 156 COMBO("fm" id "_" #x, "Filter mode " label #x, 0, filter_modes), \ 157 COMBO("s" id "_" #x, "Filter slope " label #x, 0, filter_slopes), \ 158 SWITCH("xs" id "_" #x, "Filter solo " label #x, 0.0f), \ 159 SWITCH("xm" id "_" #x, "Filter mute " label #x, 0.0f), \ 160 LOG_CONTROL_DFL("f" id "_" #x, "Frequency " label #x, U_HZ, para_equalizer_base_metadata::FREQ, f), \ 161 { "g" id "_" #x, "Gain " label # x, U_GAIN_AMP, R_CONTROL, F_IN | F_LOG | F_UPPER | F_LOWER | F_STEP, GAIN_AMP_M_36_DB, GAIN_AMP_P_36_DB, GAIN_AMP_0_DB, 0.01, NULL, NULL }, \ 162 { "q" id "_" #x, "Quality factor " label #x, U_NONE, R_CONTROL, F_IN | F_UPPER | F_LOWER | F_STEP, 0.0f, 100.0f, 0.0f, 0.025f, NULL }, \ 163 { "hue" id "_" #x, "Hue " label #x, U_NONE, R_CONTROL, F_IN | F_UPPER | F_LOWER | F_STEP | F_CYCLIC, 0.0f, 1.0f, (float(x) / float(total)), 0.25f/360.0f, NULL }, \ 164 BLINK("fv" id "_" #x, "Filter visibility " label #x), \ 165 MESH("agf" id "_" #x, "Amplitude graph " label #x, 2, para_equalizer_base_metadata::FILTER_MESH_POINTS) 166 167 #define EQ_FILTER_MONO(x, total, f) EQ_FILTER("", "", x, total, f) 168 #define EQ_FILTER_STEREO(x, total, f) EQ_FILTER("", "", x, total, f) 169 #define EQ_FILTER_LR(x, total, f) EQ_FILTER("l", "Left ", x, total, f), EQ_FILTER("r", "Right ", x, total, f) 170 #define EQ_FILTER_MS(x, total, f) EQ_FILTER("m", "Mid ", x, total, f), EQ_FILTER("s", "Side ", x, total, f) 171 172 #define EQ_COMMON(fselect) \ 173 BYPASS, \ 174 AMP_GAIN("g_in", "Input gain", para_equalizer_base_metadata::IN_GAIN_DFL, 10.0f), \ 175 AMP_GAIN("g_out", "Output gain", para_equalizer_base_metadata::OUT_GAIN_DFL, 10.0f), \ 176 COMBO("mode", "Equalizer mode", 0, equalizer_eq_modes), \ 177 COMBO("fft", "FFT analysis", 0, equalizer_fft_mode), \ 178 LOG_CONTROL("react", "FFT reactivity", U_MSEC, para_equalizer_base_metadata::REACT_TIME), \ 179 AMP_GAIN("shift", "Shift gain", 1.0f, 100.0f), \ 180 LOG_CONTROL("zoom", "Graph zoom", U_GAIN_AMP, para_equalizer_base_metadata::ZOOM), \ 181 COMBO("fsel", "Filter select", 0, fselect) 182 183 #define EQ_MONO_PORTS \ 184 MESH("ag", "Amplitude graph", 2, para_equalizer_base_metadata::MESH_POINTS), \ 185 CONTROL("frqs", "Frequency shift", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 186 METER_GAIN("im", "Input signal meter", GAIN_AMP_P_12_DB), \ 187 METER_GAIN("sm", "Output signal meter", GAIN_AMP_P_12_DB), \ 188 MESH("fftg", "FFT graph", 2, para_equalizer_base_metadata::MESH_POINTS) 189 190 #define EQ_STEREO_PORTS \ 191 PAN_CTL("bal", "Output balance", 0.0f), \ 192 MESH("ag", "Amplitude graph", 2, para_equalizer_base_metadata::MESH_POINTS), \ 193 CONTROL("frqs", "Frequency shift", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 194 METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \ 195 METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \ 196 MESH("fftg_l", "FFT channel Left", 2, para_equalizer_base_metadata::MESH_POINTS), \ 197 SWITCH("fftv_l", "FFT visibility Left", 1.0f), \ 198 METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \ 199 METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \ 200 MESH("fftg_r", "FFT channel Right", 2, para_equalizer_base_metadata::MESH_POINTS), \ 201 SWITCH("fftv_r", "FFT visibility Right", 1.0f) \ 202 203 #define EQ_LR_PORTS \ 204 PAN_CTL("bal", "Output balance", 0.0f), \ 205 MESH("ag_l", "Amplitude graph Left", 2, para_equalizer_base_metadata::MESH_POINTS), \ 206 CONTROL("frqs_l", "Frequency shift Left", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 207 METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \ 208 METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \ 209 MESH("fftg_l", "FFT channel Left", 2, para_equalizer_base_metadata::MESH_POINTS), \ 210 SWITCH("fftv_l", "FFT visibility Left", 1.0f), \ 211 MESH("ag_r", "Amplitude graph Right", 2, para_equalizer_base_metadata::MESH_POINTS), \ 212 CONTROL("frqs_r", "Frequency shift Right", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 213 METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \ 214 METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \ 215 MESH("fftg_r", "FFT channel Right", 2, para_equalizer_base_metadata::MESH_POINTS), \ 216 SWITCH("fftv_r", "FFT visibility Right", 1.0f) 217 218 #define EQ_MS_PORTS \ 219 PAN_CTL("bal", "Output balance", 0.0f), \ 220 SWITCH("lstn", "Mid/Side listen", 0.0f), \ 221 AMP_GAIN100("gain_m", "Mid gain", GAIN_AMP_0_DB), \ 222 AMP_GAIN100("gain_s", "Side gain", GAIN_AMP_0_DB), \ 223 MESH("ag_m", "Amplitude graph Mid", 2, para_equalizer_base_metadata::MESH_POINTS), \ 224 CONTROL("frqs_m", "Frequency shift Mid", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 225 METER_GAIN("iml", "Input signal meter Left", GAIN_AMP_P_12_DB), \ 226 METER_GAIN("sml", "Output signal meter Left", GAIN_AMP_P_12_DB), \ 227 MESH("fftg_m", "FFT channel Mid", 2, para_equalizer_base_metadata::MESH_POINTS), \ 228 SWITCH("fftv_m", "FFT visibility Mid", 1.0f), \ 229 MESH("ag_s", "Amplitude graph Side", 2, para_equalizer_base_metadata::MESH_POINTS), \ 230 CONTROL("frqs_s", "Frequency shift Side", U_SEMITONES, para_equalizer_base_metadata::PITCH), \ 231 METER_GAIN("imr", "Input signal meter Right", GAIN_AMP_P_12_DB), \ 232 METER_GAIN("smr", "Output signal meter Right", GAIN_AMP_P_12_DB), \ 233 MESH("fftg_s", "FFT channel Side", 2, para_equalizer_base_metadata::MESH_POINTS), \ 234 SWITCH("fftv_s", "FFT visibility Side", 1.0f) 235 236 static const port_t para_equalizer_x16_mono_ports[] = 237 { 238 PORTS_MONO_PLUGIN, 239 EQ_COMMON(filter_select_16), 240 EQ_MONO_PORTS, 241 EQ_FILTER_MONO(0, 16, 16.0f), 242 EQ_FILTER_MONO(1, 16, 25.0f), 243 EQ_FILTER_MONO(2, 16, 40.0f), 244 EQ_FILTER_MONO(3, 16, 63.0f), 245 EQ_FILTER_MONO(4, 16, 100.0f), 246 EQ_FILTER_MONO(5, 16, 160.0f), 247 EQ_FILTER_MONO(6, 16, 250.0f), 248 EQ_FILTER_MONO(7, 16, 400.0f), 249 EQ_FILTER_MONO(8, 16, 630.0f), 250 EQ_FILTER_MONO(9, 16, 1000.0f), 251 EQ_FILTER_MONO(10, 16, 1600.0f), 252 EQ_FILTER_MONO(11, 16, 2500.0f), 253 EQ_FILTER_MONO(12, 16, 4000.0f), 254 EQ_FILTER_MONO(13, 16, 6300.0f), 255 EQ_FILTER_MONO(14, 16, 10000.0f), 256 EQ_FILTER_MONO(15, 16, 16000.0f), 257 258 PORTS_END 259 }; 260 261 static const port_t para_equalizer_x32_mono_ports[] = 262 { 263 PORTS_MONO_PLUGIN, 264 EQ_COMMON(filter_select_32), 265 EQ_MONO_PORTS, 266 EQ_FILTER_MONO(0, 32, 16.0f), 267 EQ_FILTER_MONO(1, 32, 20.0f), 268 EQ_FILTER_MONO(2, 32, 25.0f), 269 EQ_FILTER_MONO(3, 32, 31.5f), 270 EQ_FILTER_MONO(4, 32, 40.0f), 271 EQ_FILTER_MONO(5, 32, 50.0f), 272 EQ_FILTER_MONO(6, 32, 63.0f), 273 EQ_FILTER_MONO(7, 32, 80.0f), 274 EQ_FILTER_MONO(8, 32, 100.0f), 275 EQ_FILTER_MONO(9, 32, 125.0f), 276 EQ_FILTER_MONO(10, 32, 160.0f), 277 EQ_FILTER_MONO(11, 32, 200.0f), 278 EQ_FILTER_MONO(12, 32, 250.0f), 279 EQ_FILTER_MONO(13, 32, 315.0f), 280 EQ_FILTER_MONO(14, 32, 400.0f), 281 EQ_FILTER_MONO(15, 32, 500.0f), 282 EQ_FILTER_MONO(16, 32, 630.0f), 283 EQ_FILTER_MONO(17, 32, 800.0f), 284 EQ_FILTER_MONO(18, 32, 1000.0f), 285 EQ_FILTER_MONO(19, 32, 1250.0f), 286 EQ_FILTER_MONO(20, 32, 1600.0f), 287 EQ_FILTER_MONO(21, 32, 2000.0f), 288 EQ_FILTER_MONO(22, 32, 2500.0f), 289 EQ_FILTER_MONO(23, 32, 3150.0f), 290 EQ_FILTER_MONO(24, 32, 4000.0f), 291 EQ_FILTER_MONO(25, 32, 5000.0f), 292 EQ_FILTER_MONO(26, 32, 6300.0f), 293 EQ_FILTER_MONO(27, 32, 8000.0f), 294 EQ_FILTER_MONO(28, 32, 10000.0f), 295 EQ_FILTER_MONO(29, 32, 12500.0f), 296 EQ_FILTER_MONO(30, 32, 16000.0f), 297 EQ_FILTER_MONO(31, 32, 20000.0f), 298 299 PORTS_END 300 }; 301 302 static const port_t para_equalizer_x16_stereo_ports[] = 303 { 304 PORTS_STEREO_PLUGIN, 305 EQ_COMMON(filter_select_16), 306 EQ_STEREO_PORTS, 307 EQ_FILTER_STEREO(0, 16, 16.0f), 308 EQ_FILTER_STEREO(1, 16, 25.0f), 309 EQ_FILTER_STEREO(2, 16, 40.0f), 310 EQ_FILTER_STEREO(3, 16, 63.0f), 311 EQ_FILTER_STEREO(4, 16, 100.0f), 312 EQ_FILTER_STEREO(5, 16, 160.0f), 313 EQ_FILTER_STEREO(6, 16, 250.0f), 314 EQ_FILTER_STEREO(7, 16, 400.0f), 315 EQ_FILTER_STEREO(8, 16, 630.0f), 316 EQ_FILTER_STEREO(9, 16, 1000.0f), 317 EQ_FILTER_STEREO(10, 16, 1600.0f), 318 EQ_FILTER_STEREO(11, 16, 2500.0f), 319 EQ_FILTER_STEREO(12, 16, 4000.0f), 320 EQ_FILTER_STEREO(13, 16, 6300.0f), 321 EQ_FILTER_STEREO(14, 16, 10000.0f), 322 EQ_FILTER_STEREO(15, 16, 16000.0f), 323 324 PORTS_END 325 }; 326 327 static const port_t para_equalizer_x32_stereo_ports[] = 328 { 329 PORTS_STEREO_PLUGIN, 330 EQ_COMMON(filter_select_32), 331 EQ_STEREO_PORTS, 332 EQ_FILTER_STEREO(0, 32, 16.0f), 333 EQ_FILTER_STEREO(1, 32, 20.0f), 334 EQ_FILTER_STEREO(2, 32, 25.0f), 335 EQ_FILTER_STEREO(3, 32, 31.5f), 336 EQ_FILTER_STEREO(4, 32, 40.0f), 337 EQ_FILTER_STEREO(5, 32, 50.0f), 338 EQ_FILTER_STEREO(6, 32, 63.0f), 339 EQ_FILTER_STEREO(7, 32, 80.0f), 340 EQ_FILTER_STEREO(8, 32, 100.0f), 341 EQ_FILTER_STEREO(9, 32, 125.0f), 342 EQ_FILTER_STEREO(10, 32, 160.0f), 343 EQ_FILTER_STEREO(11, 32, 200.0f), 344 EQ_FILTER_STEREO(12, 32, 250.0f), 345 EQ_FILTER_STEREO(13, 32, 315.0f), 346 EQ_FILTER_STEREO(14, 32, 400.0f), 347 EQ_FILTER_STEREO(15, 32, 500.0f), 348 EQ_FILTER_STEREO(16, 32, 630.0f), 349 EQ_FILTER_STEREO(17, 32, 800.0f), 350 EQ_FILTER_STEREO(18, 32, 1000.0f), 351 EQ_FILTER_STEREO(19, 32, 1250.0f), 352 EQ_FILTER_STEREO(20, 32, 1600.0f), 353 EQ_FILTER_STEREO(21, 32, 2000.0f), 354 EQ_FILTER_STEREO(22, 32, 2500.0f), 355 EQ_FILTER_STEREO(23, 32, 3150.0f), 356 EQ_FILTER_STEREO(24, 32, 4000.0f), 357 EQ_FILTER_STEREO(25, 32, 5000.0f), 358 EQ_FILTER_STEREO(26, 32, 6300.0f), 359 EQ_FILTER_STEREO(27, 32, 8000.0f), 360 EQ_FILTER_STEREO(28, 32, 10000.0f), 361 EQ_FILTER_STEREO(29, 32, 12500.0f), 362 EQ_FILTER_STEREO(30, 32, 16000.0f), 363 EQ_FILTER_STEREO(31, 32, 20000.0f), 364 365 PORTS_END 366 }; 367 368 static const port_t para_equalizer_x16_lr_ports[] = 369 { 370 PORTS_STEREO_PLUGIN, 371 EQ_COMMON(filter_select_16lr), 372 EQ_LR_PORTS, 373 EQ_FILTER_LR(0, 16, 16.0f), 374 EQ_FILTER_LR(1, 16, 25.0f), 375 EQ_FILTER_LR(2, 16, 40.0f), 376 EQ_FILTER_LR(3, 16, 63.0f), 377 EQ_FILTER_LR(4, 16, 100.0f), 378 EQ_FILTER_LR(5, 16, 160.0f), 379 EQ_FILTER_LR(6, 16, 250.0f), 380 EQ_FILTER_LR(7, 16, 400.0f), 381 EQ_FILTER_LR(8, 16, 630.0f), 382 EQ_FILTER_LR(9, 16, 1000.0f), 383 EQ_FILTER_LR(10, 16, 1600.0f), 384 EQ_FILTER_LR(11, 16, 2500.0f), 385 EQ_FILTER_LR(12, 16, 4000.0f), 386 EQ_FILTER_LR(13, 16, 6300.0f), 387 EQ_FILTER_LR(14, 16, 10000.0f), 388 EQ_FILTER_LR(15, 16, 16000.0f), 389 390 PORTS_END 391 }; 392 393 static const port_t para_equalizer_x32_lr_ports[] = 394 { 395 PORTS_STEREO_PLUGIN, 396 EQ_COMMON(filter_select_32lr), 397 EQ_LR_PORTS, 398 EQ_FILTER_LR(0, 32, 16.0f), 399 EQ_FILTER_LR(1, 32, 20.0f), 400 EQ_FILTER_LR(2, 32, 25.0f), 401 EQ_FILTER_LR(3, 32, 31.5f), 402 EQ_FILTER_LR(4, 32, 40.0f), 403 EQ_FILTER_LR(5, 32, 50.0f), 404 EQ_FILTER_LR(6, 32, 63.0f), 405 EQ_FILTER_LR(7, 32, 80.0f), 406 EQ_FILTER_LR(8, 32, 100.0f), 407 EQ_FILTER_LR(9, 32, 125.0f), 408 EQ_FILTER_LR(10, 32, 160.0f), 409 EQ_FILTER_LR(11, 32, 200.0f), 410 EQ_FILTER_LR(12, 32, 250.0f), 411 EQ_FILTER_LR(13, 32, 315.0f), 412 EQ_FILTER_LR(14, 32, 400.0f), 413 EQ_FILTER_LR(15, 32, 500.0f), 414 EQ_FILTER_LR(16, 32, 630.0f), 415 EQ_FILTER_LR(17, 32, 800.0f), 416 EQ_FILTER_LR(18, 32, 1000.0f), 417 EQ_FILTER_LR(19, 32, 1250.0f), 418 EQ_FILTER_LR(20, 32, 1600.0f), 419 EQ_FILTER_LR(21, 32, 2000.0f), 420 EQ_FILTER_LR(22, 32, 2500.0f), 421 EQ_FILTER_LR(23, 32, 3150.0f), 422 EQ_FILTER_LR(24, 32, 4000.0f), 423 EQ_FILTER_LR(25, 32, 5000.0f), 424 EQ_FILTER_LR(26, 32, 6300.0f), 425 EQ_FILTER_LR(27, 32, 8000.0f), 426 EQ_FILTER_LR(28, 32, 10000.0f), 427 EQ_FILTER_LR(29, 32, 12500.0f), 428 EQ_FILTER_LR(30, 32, 16000.0f), 429 EQ_FILTER_LR(31, 32, 20000.0f), 430 431 PORTS_END 432 }; 433 434 static const port_t para_equalizer_x16_ms_ports[] = 435 { 436 PORTS_STEREO_PLUGIN, 437 EQ_COMMON(filter_select_16ms), 438 EQ_MS_PORTS, 439 EQ_FILTER_MS(0, 16, 16.0f), 440 EQ_FILTER_MS(1, 16, 25.0f), 441 EQ_FILTER_MS(2, 16, 40.0f), 442 EQ_FILTER_MS(3, 16, 63.0f), 443 EQ_FILTER_MS(4, 16, 100.0f), 444 EQ_FILTER_MS(5, 16, 160.0f), 445 EQ_FILTER_MS(6, 16, 250.0f), 446 EQ_FILTER_MS(7, 16, 400.0f), 447 EQ_FILTER_MS(8, 16, 630.0f), 448 EQ_FILTER_MS(9, 16, 1000.0f), 449 EQ_FILTER_MS(10, 16, 1600.0f), 450 EQ_FILTER_MS(11, 16, 2500.0f), 451 EQ_FILTER_MS(12, 16, 4000.0f), 452 EQ_FILTER_MS(13, 16, 6300.0f), 453 EQ_FILTER_MS(14, 16, 10000.0f), 454 EQ_FILTER_MS(15, 16, 16000.0f), 455 456 PORTS_END 457 }; 458 459 static const port_t para_equalizer_x32_ms_ports[] = 460 { 461 PORTS_STEREO_PLUGIN, 462 EQ_COMMON(filter_select_32ms), 463 EQ_MS_PORTS, 464 EQ_FILTER_MS(0, 32, 16.0f), 465 EQ_FILTER_MS(1, 32, 20.0f), 466 EQ_FILTER_MS(2, 32, 25.0f), 467 EQ_FILTER_MS(3, 32, 31.5f), 468 EQ_FILTER_MS(4, 32, 40.0f), 469 EQ_FILTER_MS(5, 32, 50.0f), 470 EQ_FILTER_MS(6, 32, 63.0f), 471 EQ_FILTER_MS(7, 32, 80.0f), 472 EQ_FILTER_MS(8, 32, 100.0f), 473 EQ_FILTER_MS(9, 32, 125.0f), 474 EQ_FILTER_MS(10, 32, 160.0f), 475 EQ_FILTER_MS(11, 32, 200.0f), 476 EQ_FILTER_MS(12, 32, 250.0f), 477 EQ_FILTER_MS(13, 32, 315.0f), 478 EQ_FILTER_MS(14, 32, 400.0f), 479 EQ_FILTER_MS(15, 32, 500.0f), 480 EQ_FILTER_MS(16, 32, 630.0f), 481 EQ_FILTER_MS(17, 32, 800.0f), 482 EQ_FILTER_MS(18, 32, 1000.0f), 483 EQ_FILTER_MS(19, 32, 1250.0f), 484 EQ_FILTER_MS(20, 32, 1600.0f), 485 EQ_FILTER_MS(21, 32, 2000.0f), 486 EQ_FILTER_MS(22, 32, 2500.0f), 487 EQ_FILTER_MS(23, 32, 3150.0f), 488 EQ_FILTER_MS(24, 32, 4000.0f), 489 EQ_FILTER_MS(25, 32, 5000.0f), 490 EQ_FILTER_MS(26, 32, 6300.0f), 491 EQ_FILTER_MS(27, 32, 8000.0f), 492 EQ_FILTER_MS(28, 32, 10000.0f), 493 EQ_FILTER_MS(29, 32, 12500.0f), 494 EQ_FILTER_MS(30, 32, 16000.0f), 495 EQ_FILTER_MS(31, 32, 20000.0f), 496 497 PORTS_END 498 }; 499 500 const plugin_metadata_t para_equalizer_x16_mono_metadata::metadata = 501 { 502 "Parametrischer Entzerrer x16 Mono", 503 "Parametric Equalizer x16 Mono", 504 "PE16M", 505 &developers::v_sadovnikov, 506 "para_equalizer_x16_mono", 507 "dh3y", 508 LSP_PARA_EQUALIZER_BASE + 0, 509 LSP_VERSION(1, 0, 4), 510 para_equalizer_classes, 511 E_INLINE_DISPLAY, 512 para_equalizer_x16_mono_ports, 513 "equalizer/parametric/x16/mono.xml", 514 NULL, 515 mono_plugin_port_groups 516 }; 517 518 const plugin_metadata_t para_equalizer_x32_mono_metadata::metadata = 519 { 520 "Parametrischer Entzerrer x32 Mono", 521 "Parametric Equalizer x32 Mono", 522 "PE32M", 523 &developers::v_sadovnikov, 524 "para_equalizer_x32_mono", 525 "i0px", 526 LSP_PARA_EQUALIZER_BASE + 1, 527 LSP_VERSION(1, 0, 4), 528 para_equalizer_classes, 529 E_INLINE_DISPLAY, 530 para_equalizer_x32_mono_ports, 531 "equalizer/parametric/x32/mono.xml", 532 NULL, 533 mono_plugin_port_groups 534 }; 535 536 const plugin_metadata_t para_equalizer_x16_stereo_metadata::metadata = 537 { 538 "Parametrischer Entzerrer x16 Stereo", 539 "Parametric Equalizer x16 Stereo", 540 "PE16S", 541 &developers::v_sadovnikov, 542 "para_equalizer_x16_stereo", 543 "a5er", 544 LSP_PARA_EQUALIZER_BASE + 2, 545 LSP_VERSION(1, 0, 4), 546 para_equalizer_classes, 547 E_INLINE_DISPLAY, 548 para_equalizer_x16_stereo_ports, 549 "equalizer/parametric/x16/stereo.xml", 550 NULL, 551 stereo_plugin_port_groups 552 }; 553 554 const plugin_metadata_t para_equalizer_x32_stereo_metadata::metadata = 555 { 556 "Parametrischer Entzerrer x32 Stereo", 557 "Parametric Equalizer x32 Stereo", 558 "PE32S", 559 &developers::v_sadovnikov, 560 "para_equalizer_x32_stereo", 561 "s2nz", 562 LSP_PARA_EQUALIZER_BASE + 3, 563 LSP_VERSION(1, 0, 4), 564 para_equalizer_classes, 565 E_INLINE_DISPLAY, 566 para_equalizer_x32_stereo_ports, 567 "equalizer/parametric/x32/stereo.xml", 568 NULL, 569 stereo_plugin_port_groups 570 }; 571 572 const plugin_metadata_t para_equalizer_x16_lr_metadata::metadata = 573 { 574 "Parametrischer Entzerrer x16 LeftRight", 575 "Parametric Equalizer x16 LeftRight", 576 "PE16LR", 577 &developers::v_sadovnikov, 578 "para_equalizer_x16_lr", 579 "4kef", 580 LSP_PARA_EQUALIZER_BASE + 4, 581 LSP_VERSION(1, 0, 4), 582 para_equalizer_classes, 583 E_INLINE_DISPLAY, 584 para_equalizer_x16_lr_ports, 585 "equalizer/parametric/x16/lr.xml", 586 NULL, 587 stereo_plugin_port_groups 588 }; 589 590 const plugin_metadata_t para_equalizer_x32_lr_metadata::metadata = 591 { 592 "Parametrischer Entzerrer x32 LeftRight", 593 "Parametric Equalizer x32 LeftRight", 594 "PE32LR", 595 &developers::v_sadovnikov, 596 "para_equalizer_x32_lr", 597 "ilqj", 598 LSP_PARA_EQUALIZER_BASE + 5, 599 LSP_VERSION(1, 0, 4), 600 para_equalizer_classes, 601 E_INLINE_DISPLAY, 602 para_equalizer_x32_lr_ports, 603 "equalizer/parametric/x32/lr.xml", 604 NULL, 605 stereo_plugin_port_groups 606 }; 607 608 const plugin_metadata_t para_equalizer_x16_ms_metadata::metadata = 609 { 610 "Parametrischer Entzerrer x16 MidSide", 611 "Parametric Equalizer x16 MidSide", 612 "PE16MS", 613 &developers::v_sadovnikov, 614 "para_equalizer_x16_ms", 615 "opjs", 616 LSP_PARA_EQUALIZER_BASE + 6, 617 LSP_VERSION(1, 0, 4), 618 para_equalizer_classes, 619 E_INLINE_DISPLAY, 620 para_equalizer_x16_ms_ports, 621 "equalizer/parametric/x16/ms.xml", 622 NULL, 623 stereo_plugin_port_groups 624 }; 625 626 const plugin_metadata_t para_equalizer_x32_ms_metadata::metadata = 627 { 628 "Parametrischer Entzerrer x32 MidSide", 629 "Parametric Equalizer x32 MidSide", 630 "PE32MS", 631 &developers::v_sadovnikov, 632 "para_equalizer_x32_ms", 633 "lgz9", 634 LSP_PARA_EQUALIZER_BASE + 7, 635 LSP_VERSION(1, 0, 4), 636 para_equalizer_classes, 637 E_INLINE_DISPLAY, 638 para_equalizer_x32_ms_ports, 639 "equalizer/parametric/x32/ms.xml", 640 NULL, 641 stereo_plugin_port_groups 642 }; 643 } 644 645 646 647