1 #include <stdlib.h>
2 #include <string.h>
3 #ifndef WIN32
4 #include "config.h"
5 #endif
6
7 #ifdef ENABLE_NLS
8 #include <libintl.h>
9 #endif
10
11 #define _ISOC9X_SOURCE 1
12 #define _ISOC99_SOURCE 1
13 #define __USE_ISOC99 1
14 #define __USE_ISOC9X 1
15
16 #include <math.h>
17
18 #include "ladspa.h"
19
20 #ifdef WIN32
21 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport)
22 int bIsFirstTime = 1;
23 static void __attribute__((constructor)) swh_init(); // forward declaration
24 #else
25 #define _WINDOWS_DLL_EXPORT_
26 #endif
27
28 #line 9 "butterworth_1902.xml"
29
30 #include "config.h"
31 #include "util/iir.h"
32 #include "util/buffer.h"
33
34 #define BWXOVER_IIR_CUTOFF 0
35 #define BWXOVER_IIR_RESONANCE 1
36 #define BWXOVER_IIR_INPUT 2
37 #define BWXOVER_IIR_LPOUTPUT 3
38 #define BWXOVER_IIR_HPOUTPUT 4
39 #define BUTTLOW_IIR_CUTOFF 0
40 #define BUTTLOW_IIR_RESONANCE 1
41 #define BUTTLOW_IIR_INPUT 2
42 #define BUTTLOW_IIR_OUTPUT 3
43 #define BUTTHIGH_IIR_CUTOFF 0
44 #define BUTTHIGH_IIR_RESONANCE 1
45 #define BUTTHIGH_IIR_INPUT 2
46 #define BUTTHIGH_IIR_OUTPUT 3
47
48 static LADSPA_Descriptor *bwxover_iirDescriptor = NULL;
49
50 typedef struct {
51 LADSPA_Data *cutoff;
52 LADSPA_Data *resonance;
53 LADSPA_Data *input;
54 LADSPA_Data *lpoutput;
55 LADSPA_Data *hpoutput;
56 iir_stage_t* gt;
57 iirf_t* iirf;
58 long sample_rate;
59 LADSPA_Data run_adding_gain;
60 } Bwxover_iir;
61
62 static LADSPA_Descriptor *buttlow_iirDescriptor = NULL;
63
64 typedef struct {
65 LADSPA_Data *cutoff;
66 LADSPA_Data *resonance;
67 LADSPA_Data *input;
68 LADSPA_Data *output;
69 iir_stage_t* gt;
70 iirf_t* iirf;
71 long sample_rate;
72 LADSPA_Data run_adding_gain;
73 } Buttlow_iir;
74
75 static LADSPA_Descriptor *butthigh_iirDescriptor = NULL;
76
77 typedef struct {
78 LADSPA_Data *cutoff;
79 LADSPA_Data *resonance;
80 LADSPA_Data *input;
81 LADSPA_Data *output;
82 iir_stage_t* gt;
83 iirf_t* iirf;
84 long sample_rate;
85 LADSPA_Data run_adding_gain;
86 } Butthigh_iir;
87
88 _WINDOWS_DLL_EXPORT_
ladspa_descriptor(unsigned long index)89 const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) {
90
91 #ifdef WIN32
92 if (bIsFirstTime) {
93 swh_init();
94 bIsFirstTime = 0;
95 }
96 #endif
97 switch (index) {
98 case 0:
99 return bwxover_iirDescriptor;
100 case 1:
101 return buttlow_iirDescriptor;
102 case 2:
103 return butthigh_iirDescriptor;
104 default:
105 return NULL;
106 }
107 }
108
activateBwxover_iir(LADSPA_Handle instance)109 static void activateBwxover_iir(LADSPA_Handle instance) {
110 Bwxover_iir *plugin_data = (Bwxover_iir *)instance;
111 iir_stage_t*gt = plugin_data->gt;
112 iirf_t*iirf = plugin_data->iirf;
113 long sample_rate = plugin_data->sample_rate;
114 #line 34 "butterworth_1902.xml"
115
116 gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
117 iirf = init_iirf_t(gt);
118 butterworth_stage(gt, 0, *(plugin_data->cutoff),
119 *(plugin_data->resonance),
120 sample_rate);
121 plugin_data->gt = gt;
122 plugin_data->iirf = iirf;
123 plugin_data->sample_rate = sample_rate;
124
125 }
126
cleanupBwxover_iir(LADSPA_Handle instance)127 static void cleanupBwxover_iir(LADSPA_Handle instance) {
128 #line 42 "butterworth_1902.xml"
129 Bwxover_iir *plugin_data = (Bwxover_iir *)instance;
130 free_iirf_t(plugin_data->iirf, plugin_data->gt);
131 free_iir_stage(plugin_data->gt);
132 free(instance);
133 }
134
connectPortBwxover_iir(LADSPA_Handle instance,unsigned long port,LADSPA_Data * data)135 static void connectPortBwxover_iir(
136 LADSPA_Handle instance,
137 unsigned long port,
138 LADSPA_Data *data) {
139 Bwxover_iir *plugin;
140
141 plugin = (Bwxover_iir *)instance;
142 switch (port) {
143 case BWXOVER_IIR_CUTOFF:
144 plugin->cutoff = data;
145 break;
146 case BWXOVER_IIR_RESONANCE:
147 plugin->resonance = data;
148 break;
149 case BWXOVER_IIR_INPUT:
150 plugin->input = data;
151 break;
152 case BWXOVER_IIR_LPOUTPUT:
153 plugin->lpoutput = data;
154 break;
155 case BWXOVER_IIR_HPOUTPUT:
156 plugin->hpoutput = data;
157 break;
158 }
159 }
160
instantiateBwxover_iir(const LADSPA_Descriptor * descriptor,unsigned long s_rate)161 static LADSPA_Handle instantiateBwxover_iir(
162 const LADSPA_Descriptor *descriptor,
163 unsigned long s_rate) {
164 Bwxover_iir *plugin_data = (Bwxover_iir *)calloc(1, sizeof(Bwxover_iir));
165 iir_stage_t*gt = NULL;
166 iirf_t*iirf = NULL;
167 long sample_rate;
168
169 #line 22 "butterworth_1902.xml"
170 sample_rate = s_rate;
171
172 plugin_data->gt = gt;
173 plugin_data->iirf = iirf;
174 plugin_data->sample_rate = sample_rate;
175
176 return (LADSPA_Handle)plugin_data;
177 }
178
179 #undef buffer_write
180 #undef RUN_ADDING
181 #undef RUN_REPLACING
182
183 #define buffer_write(b, v) (b = v)
184 #define RUN_ADDING 0
185 #define RUN_REPLACING 1
186
runBwxover_iir(LADSPA_Handle instance,unsigned long sample_count)187 static void runBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) {
188 Bwxover_iir *plugin_data = (Bwxover_iir *)instance;
189 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
190
191 /* Cutoff Frequency (Hz) (float value) */
192 const LADSPA_Data cutoff = *(plugin_data->cutoff);
193
194 /* Resonance (float value) */
195 const LADSPA_Data resonance = *(plugin_data->resonance);
196
197 /* Input (array of floats of length sample_count) */
198 const LADSPA_Data * const input = plugin_data->input;
199
200 /* LP-Output (array of floats of length sample_count) */
201 LADSPA_Data * const lpoutput = plugin_data->lpoutput;
202
203 /* HP-Output (array of floats of length sample_count) */
204 LADSPA_Data * const hpoutput = plugin_data->hpoutput;
205 iir_stage_t* gt = plugin_data->gt;
206 iirf_t* iirf = plugin_data->iirf;
207 long sample_rate = plugin_data->sample_rate;
208
209 #line 25 "butterworth_1902.xml"
210 butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
211 iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0);
212 buffer_sub(input, lpoutput, hpoutput, sample_count);
213
214 // Unused variable
215 (void)(run_adding_gain);
216 }
217 #undef buffer_write
218 #undef RUN_ADDING
219 #undef RUN_REPLACING
220
221 #define buffer_write(b, v) (b += (v) * run_adding_gain)
222 #define RUN_ADDING 1
223 #define RUN_REPLACING 0
224
setRunAddingGainBwxover_iir(LADSPA_Handle instance,LADSPA_Data gain)225 static void setRunAddingGainBwxover_iir(LADSPA_Handle instance, LADSPA_Data gain) {
226 ((Bwxover_iir *)instance)->run_adding_gain = gain;
227 }
228
runAddingBwxover_iir(LADSPA_Handle instance,unsigned long sample_count)229 static void runAddingBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) {
230 Bwxover_iir *plugin_data = (Bwxover_iir *)instance;
231 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
232
233 /* Cutoff Frequency (Hz) (float value) */
234 const LADSPA_Data cutoff = *(plugin_data->cutoff);
235
236 /* Resonance (float value) */
237 const LADSPA_Data resonance = *(plugin_data->resonance);
238
239 /* Input (array of floats of length sample_count) */
240 const LADSPA_Data * const input = plugin_data->input;
241
242 /* LP-Output (array of floats of length sample_count) */
243 LADSPA_Data * const lpoutput = plugin_data->lpoutput;
244
245 /* HP-Output (array of floats of length sample_count) */
246 LADSPA_Data * const hpoutput = plugin_data->hpoutput;
247 iir_stage_t* gt = plugin_data->gt;
248 iirf_t* iirf = plugin_data->iirf;
249 long sample_rate = plugin_data->sample_rate;
250
251 #line 25 "butterworth_1902.xml"
252 butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
253 iir_process_buffer_1s_5(iirf, gt, input, lpoutput, sample_count,0);
254 buffer_sub(input, lpoutput, hpoutput, sample_count);
255
256 // Unused variable
257 (void)(run_adding_gain);
258 }
259
activateButtlow_iir(LADSPA_Handle instance)260 static void activateButtlow_iir(LADSPA_Handle instance) {
261 Buttlow_iir *plugin_data = (Buttlow_iir *)instance;
262 iir_stage_t*gt = plugin_data->gt;
263 iirf_t*iirf = plugin_data->iirf;
264 long sample_rate = plugin_data->sample_rate;
265 #line 34 "butterworth_1902.xml"
266
267 gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
268 iirf = init_iirf_t(gt);
269 butterworth_stage(gt, 0, *(plugin_data->cutoff),
270 *(plugin_data->resonance),
271 sample_rate);
272 plugin_data->gt = gt;
273 plugin_data->iirf = iirf;
274 plugin_data->sample_rate = sample_rate;
275
276 }
277
cleanupButtlow_iir(LADSPA_Handle instance)278 static void cleanupButtlow_iir(LADSPA_Handle instance) {
279 #line 42 "butterworth_1902.xml"
280 Buttlow_iir *plugin_data = (Buttlow_iir *)instance;
281 free_iirf_t(plugin_data->iirf, plugin_data->gt);
282 free_iir_stage(plugin_data->gt);
283 free(instance);
284 }
285
connectPortButtlow_iir(LADSPA_Handle instance,unsigned long port,LADSPA_Data * data)286 static void connectPortButtlow_iir(
287 LADSPA_Handle instance,
288 unsigned long port,
289 LADSPA_Data *data) {
290 Buttlow_iir *plugin;
291
292 plugin = (Buttlow_iir *)instance;
293 switch (port) {
294 case BUTTLOW_IIR_CUTOFF:
295 plugin->cutoff = data;
296 break;
297 case BUTTLOW_IIR_RESONANCE:
298 plugin->resonance = data;
299 break;
300 case BUTTLOW_IIR_INPUT:
301 plugin->input = data;
302 break;
303 case BUTTLOW_IIR_OUTPUT:
304 plugin->output = data;
305 break;
306 }
307 }
308
instantiateButtlow_iir(const LADSPA_Descriptor * descriptor,unsigned long s_rate)309 static LADSPA_Handle instantiateButtlow_iir(
310 const LADSPA_Descriptor *descriptor,
311 unsigned long s_rate) {
312 Buttlow_iir *plugin_data = (Buttlow_iir *)calloc(1, sizeof(Buttlow_iir));
313 iir_stage_t*gt = NULL;
314 iirf_t*iirf = NULL;
315 long sample_rate;
316
317 #line 22 "butterworth_1902.xml"
318 sample_rate = s_rate;
319
320 plugin_data->gt = gt;
321 plugin_data->iirf = iirf;
322 plugin_data->sample_rate = sample_rate;
323
324 return (LADSPA_Handle)plugin_data;
325 }
326
327 #undef buffer_write
328 #undef RUN_ADDING
329 #undef RUN_REPLACING
330
331 #define buffer_write(b, v) (b = v)
332 #define RUN_ADDING 0
333 #define RUN_REPLACING 1
334
runButtlow_iir(LADSPA_Handle instance,unsigned long sample_count)335 static void runButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) {
336 Buttlow_iir *plugin_data = (Buttlow_iir *)instance;
337 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
338
339 /* Cutoff Frequency (Hz) (float value) */
340 const LADSPA_Data cutoff = *(plugin_data->cutoff);
341
342 /* Resonance (float value) */
343 const LADSPA_Data resonance = *(plugin_data->resonance);
344
345 /* Input (array of floats of length sample_count) */
346 const LADSPA_Data * const input = plugin_data->input;
347
348 /* Output (array of floats of length sample_count) */
349 LADSPA_Data * const output = plugin_data->output;
350 iir_stage_t* gt = plugin_data->gt;
351 iirf_t* iirf = plugin_data->iirf;
352 long sample_rate = plugin_data->sample_rate;
353
354 #line 25 "butterworth_1902.xml"
355 butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
356 iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);
357
358 // Unused variable
359 (void)(run_adding_gain);
360 }
361 #undef buffer_write
362 #undef RUN_ADDING
363 #undef RUN_REPLACING
364
365 #define buffer_write(b, v) (b += (v) * run_adding_gain)
366 #define RUN_ADDING 1
367 #define RUN_REPLACING 0
368
setRunAddingGainButtlow_iir(LADSPA_Handle instance,LADSPA_Data gain)369 static void setRunAddingGainButtlow_iir(LADSPA_Handle instance, LADSPA_Data gain) {
370 ((Buttlow_iir *)instance)->run_adding_gain = gain;
371 }
372
runAddingButtlow_iir(LADSPA_Handle instance,unsigned long sample_count)373 static void runAddingButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) {
374 Buttlow_iir *plugin_data = (Buttlow_iir *)instance;
375 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
376
377 /* Cutoff Frequency (Hz) (float value) */
378 const LADSPA_Data cutoff = *(plugin_data->cutoff);
379
380 /* Resonance (float value) */
381 const LADSPA_Data resonance = *(plugin_data->resonance);
382
383 /* Input (array of floats of length sample_count) */
384 const LADSPA_Data * const input = plugin_data->input;
385
386 /* Output (array of floats of length sample_count) */
387 LADSPA_Data * const output = plugin_data->output;
388 iir_stage_t* gt = plugin_data->gt;
389 iirf_t* iirf = plugin_data->iirf;
390 long sample_rate = plugin_data->sample_rate;
391
392 #line 25 "butterworth_1902.xml"
393 butterworth_stage(gt, 0, cutoff, resonance, sample_rate);
394 iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);
395
396 // Unused variable
397 (void)(run_adding_gain);
398 }
399
activateButthigh_iir(LADSPA_Handle instance)400 static void activateButthigh_iir(LADSPA_Handle instance) {
401 Butthigh_iir *plugin_data = (Butthigh_iir *)instance;
402 iir_stage_t*gt = plugin_data->gt;
403 iirf_t*iirf = plugin_data->iirf;
404 long sample_rate = plugin_data->sample_rate;
405 #line 34 "butterworth_1902.xml"
406
407 gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2);
408 iirf = init_iirf_t(gt);
409 butterworth_stage(gt, 1, *(plugin_data->cutoff),
410 *(plugin_data->resonance),
411 sample_rate);
412 plugin_data->gt = gt;
413 plugin_data->iirf = iirf;
414 plugin_data->sample_rate = sample_rate;
415
416 }
417
cleanupButthigh_iir(LADSPA_Handle instance)418 static void cleanupButthigh_iir(LADSPA_Handle instance) {
419 #line 42 "butterworth_1902.xml"
420 Butthigh_iir *plugin_data = (Butthigh_iir *)instance;
421 free_iirf_t(plugin_data->iirf, plugin_data->gt);
422 free_iir_stage(plugin_data->gt);
423 free(instance);
424 }
425
connectPortButthigh_iir(LADSPA_Handle instance,unsigned long port,LADSPA_Data * data)426 static void connectPortButthigh_iir(
427 LADSPA_Handle instance,
428 unsigned long port,
429 LADSPA_Data *data) {
430 Butthigh_iir *plugin;
431
432 plugin = (Butthigh_iir *)instance;
433 switch (port) {
434 case BUTTHIGH_IIR_CUTOFF:
435 plugin->cutoff = data;
436 break;
437 case BUTTHIGH_IIR_RESONANCE:
438 plugin->resonance = data;
439 break;
440 case BUTTHIGH_IIR_INPUT:
441 plugin->input = data;
442 break;
443 case BUTTHIGH_IIR_OUTPUT:
444 plugin->output = data;
445 break;
446 }
447 }
448
instantiateButthigh_iir(const LADSPA_Descriptor * descriptor,unsigned long s_rate)449 static LADSPA_Handle instantiateButthigh_iir(
450 const LADSPA_Descriptor *descriptor,
451 unsigned long s_rate) {
452 Butthigh_iir *plugin_data = (Butthigh_iir *)calloc(1, sizeof(Butthigh_iir));
453 iir_stage_t*gt = NULL;
454 iirf_t*iirf = NULL;
455 long sample_rate;
456
457 #line 22 "butterworth_1902.xml"
458 sample_rate = s_rate;
459
460 plugin_data->gt = gt;
461 plugin_data->iirf = iirf;
462 plugin_data->sample_rate = sample_rate;
463
464 return (LADSPA_Handle)plugin_data;
465 }
466
467 #undef buffer_write
468 #undef RUN_ADDING
469 #undef RUN_REPLACING
470
471 #define buffer_write(b, v) (b = v)
472 #define RUN_ADDING 0
473 #define RUN_REPLACING 1
474
runButthigh_iir(LADSPA_Handle instance,unsigned long sample_count)475 static void runButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) {
476 Butthigh_iir *plugin_data = (Butthigh_iir *)instance;
477 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
478
479 /* Cutoff Frequency (Hz) (float value) */
480 const LADSPA_Data cutoff = *(plugin_data->cutoff);
481
482 /* Resonance (float value) */
483 const LADSPA_Data resonance = *(plugin_data->resonance);
484
485 /* Input (array of floats of length sample_count) */
486 const LADSPA_Data * const input = plugin_data->input;
487
488 /* Output (array of floats of length sample_count) */
489 LADSPA_Data * const output = plugin_data->output;
490 iir_stage_t* gt = plugin_data->gt;
491 iirf_t* iirf = plugin_data->iirf;
492 long sample_rate = plugin_data->sample_rate;
493
494 #line 25 "butterworth_1902.xml"
495 butterworth_stage(gt, 1, cutoff, resonance, sample_rate);
496 iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);
497
498 // Unused variable
499 (void)(run_adding_gain);
500 }
501 #undef buffer_write
502 #undef RUN_ADDING
503 #undef RUN_REPLACING
504
505 #define buffer_write(b, v) (b += (v) * run_adding_gain)
506 #define RUN_ADDING 1
507 #define RUN_REPLACING 0
508
setRunAddingGainButthigh_iir(LADSPA_Handle instance,LADSPA_Data gain)509 static void setRunAddingGainButthigh_iir(LADSPA_Handle instance, LADSPA_Data gain) {
510 ((Butthigh_iir *)instance)->run_adding_gain = gain;
511 }
512
runAddingButthigh_iir(LADSPA_Handle instance,unsigned long sample_count)513 static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) {
514 Butthigh_iir *plugin_data = (Butthigh_iir *)instance;
515 LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
516
517 /* Cutoff Frequency (Hz) (float value) */
518 const LADSPA_Data cutoff = *(plugin_data->cutoff);
519
520 /* Resonance (float value) */
521 const LADSPA_Data resonance = *(plugin_data->resonance);
522
523 /* Input (array of floats of length sample_count) */
524 const LADSPA_Data * const input = plugin_data->input;
525
526 /* Output (array of floats of length sample_count) */
527 LADSPA_Data * const output = plugin_data->output;
528 iir_stage_t* gt = plugin_data->gt;
529 iirf_t* iirf = plugin_data->iirf;
530 long sample_rate = plugin_data->sample_rate;
531
532 #line 25 "butterworth_1902.xml"
533 butterworth_stage(gt, 1, cutoff, resonance, sample_rate);
534 iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0);
535
536 // Unused variable
537 (void)(run_adding_gain);
538 }
539
swh_init()540 static void __attribute__((constructor)) swh_init() {
541 char **port_names;
542 LADSPA_PortDescriptor *port_descriptors;
543 LADSPA_PortRangeHint *port_range_hints;
544
545 #ifdef ENABLE_NLS
546 #define D_(s) dgettext(PACKAGE, s)
547 bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR);
548 #else
549 #define D_(s) (s)
550 #endif
551
552
553 bwxover_iirDescriptor =
554 (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor));
555
556 if (bwxover_iirDescriptor) {
557 bwxover_iirDescriptor->UniqueID = 1902;
558 bwxover_iirDescriptor->Label = "bwxover_iir";
559 bwxover_iirDescriptor->Properties =
560 LADSPA_PROPERTY_HARD_RT_CAPABLE;
561 bwxover_iirDescriptor->Name =
562 D_("Glame Butterworth X-over Filter");
563 bwxover_iirDescriptor->Maker =
564 "Alexander Ehlert <mag@glame.de>";
565 bwxover_iirDescriptor->Copyright =
566 "GPL";
567 bwxover_iirDescriptor->PortCount = 5;
568
569 port_descriptors = (LADSPA_PortDescriptor *)calloc(5,
570 sizeof(LADSPA_PortDescriptor));
571 bwxover_iirDescriptor->PortDescriptors =
572 (const LADSPA_PortDescriptor *)port_descriptors;
573
574 port_range_hints = (LADSPA_PortRangeHint *)calloc(5,
575 sizeof(LADSPA_PortRangeHint));
576 bwxover_iirDescriptor->PortRangeHints =
577 (const LADSPA_PortRangeHint *)port_range_hints;
578
579 port_names = (char **)calloc(5, sizeof(char*));
580 bwxover_iirDescriptor->PortNames =
581 (const char **)port_names;
582
583 /* Parameters for Cutoff Frequency (Hz) */
584 port_descriptors[BWXOVER_IIR_CUTOFF] =
585 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
586 port_names[BWXOVER_IIR_CUTOFF] =
587 D_("Cutoff Frequency (Hz)");
588 port_range_hints[BWXOVER_IIR_CUTOFF].HintDescriptor =
589 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC;
590 port_range_hints[BWXOVER_IIR_CUTOFF].LowerBound = 0.0001;
591 port_range_hints[BWXOVER_IIR_CUTOFF].UpperBound = 0.45;
592
593 /* Parameters for Resonance */
594 port_descriptors[BWXOVER_IIR_RESONANCE] =
595 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
596 port_names[BWXOVER_IIR_RESONANCE] =
597 D_("Resonance");
598 port_range_hints[BWXOVER_IIR_RESONANCE].HintDescriptor =
599 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE;
600 port_range_hints[BWXOVER_IIR_RESONANCE].LowerBound = 0.1;
601 port_range_hints[BWXOVER_IIR_RESONANCE].UpperBound = 1.41;
602
603 /* Parameters for Input */
604 port_descriptors[BWXOVER_IIR_INPUT] =
605 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
606 port_names[BWXOVER_IIR_INPUT] =
607 D_("Input");
608 port_range_hints[BWXOVER_IIR_INPUT].HintDescriptor = 0;
609
610 /* Parameters for LP-Output */
611 port_descriptors[BWXOVER_IIR_LPOUTPUT] =
612 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
613 port_names[BWXOVER_IIR_LPOUTPUT] =
614 D_("LP-Output");
615 port_range_hints[BWXOVER_IIR_LPOUTPUT].HintDescriptor = 0;
616
617 /* Parameters for HP-Output */
618 port_descriptors[BWXOVER_IIR_HPOUTPUT] =
619 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
620 port_names[BWXOVER_IIR_HPOUTPUT] =
621 D_("HP-Output");
622 port_range_hints[BWXOVER_IIR_HPOUTPUT].HintDescriptor = 0;
623
624 bwxover_iirDescriptor->activate = activateBwxover_iir;
625 bwxover_iirDescriptor->cleanup = cleanupBwxover_iir;
626 bwxover_iirDescriptor->connect_port = connectPortBwxover_iir;
627 bwxover_iirDescriptor->deactivate = NULL;
628 bwxover_iirDescriptor->instantiate = instantiateBwxover_iir;
629 bwxover_iirDescriptor->run = runBwxover_iir;
630 bwxover_iirDescriptor->run_adding = runAddingBwxover_iir;
631 bwxover_iirDescriptor->set_run_adding_gain = setRunAddingGainBwxover_iir;
632 }
633
634 buttlow_iirDescriptor =
635 (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor));
636
637 if (buttlow_iirDescriptor) {
638 buttlow_iirDescriptor->UniqueID = 1903;
639 buttlow_iirDescriptor->Label = "buttlow_iir";
640 buttlow_iirDescriptor->Properties =
641 LADSPA_PROPERTY_HARD_RT_CAPABLE;
642 buttlow_iirDescriptor->Name =
643 D_("GLAME Butterworth Lowpass");
644 buttlow_iirDescriptor->Maker =
645 "Alexander Ehlert <mag@glame.de>";
646 buttlow_iirDescriptor->Copyright =
647 "GPL";
648 buttlow_iirDescriptor->PortCount = 4;
649
650 port_descriptors = (LADSPA_PortDescriptor *)calloc(4,
651 sizeof(LADSPA_PortDescriptor));
652 buttlow_iirDescriptor->PortDescriptors =
653 (const LADSPA_PortDescriptor *)port_descriptors;
654
655 port_range_hints = (LADSPA_PortRangeHint *)calloc(4,
656 sizeof(LADSPA_PortRangeHint));
657 buttlow_iirDescriptor->PortRangeHints =
658 (const LADSPA_PortRangeHint *)port_range_hints;
659
660 port_names = (char **)calloc(4, sizeof(char*));
661 buttlow_iirDescriptor->PortNames =
662 (const char **)port_names;
663
664 /* Parameters for Cutoff Frequency (Hz) */
665 port_descriptors[BUTTLOW_IIR_CUTOFF] =
666 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
667 port_names[BUTTLOW_IIR_CUTOFF] =
668 D_("Cutoff Frequency (Hz)");
669 port_range_hints[BUTTLOW_IIR_CUTOFF].HintDescriptor =
670 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC;
671 port_range_hints[BUTTLOW_IIR_CUTOFF].LowerBound = 0.0001;
672 port_range_hints[BUTTLOW_IIR_CUTOFF].UpperBound = 0.45;
673
674 /* Parameters for Resonance */
675 port_descriptors[BUTTLOW_IIR_RESONANCE] =
676 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
677 port_names[BUTTLOW_IIR_RESONANCE] =
678 D_("Resonance");
679 port_range_hints[BUTTLOW_IIR_RESONANCE].HintDescriptor =
680 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE;
681 port_range_hints[BUTTLOW_IIR_RESONANCE].LowerBound = 0.1;
682 port_range_hints[BUTTLOW_IIR_RESONANCE].UpperBound = 1.41;
683
684 /* Parameters for Input */
685 port_descriptors[BUTTLOW_IIR_INPUT] =
686 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
687 port_names[BUTTLOW_IIR_INPUT] =
688 D_("Input");
689 port_range_hints[BUTTLOW_IIR_INPUT].HintDescriptor = 0;
690
691 /* Parameters for Output */
692 port_descriptors[BUTTLOW_IIR_OUTPUT] =
693 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
694 port_names[BUTTLOW_IIR_OUTPUT] =
695 D_("Output");
696 port_range_hints[BUTTLOW_IIR_OUTPUT].HintDescriptor = 0;
697
698 buttlow_iirDescriptor->activate = activateButtlow_iir;
699 buttlow_iirDescriptor->cleanup = cleanupButtlow_iir;
700 buttlow_iirDescriptor->connect_port = connectPortButtlow_iir;
701 buttlow_iirDescriptor->deactivate = NULL;
702 buttlow_iirDescriptor->instantiate = instantiateButtlow_iir;
703 buttlow_iirDescriptor->run = runButtlow_iir;
704 buttlow_iirDescriptor->run_adding = runAddingButtlow_iir;
705 buttlow_iirDescriptor->set_run_adding_gain = setRunAddingGainButtlow_iir;
706 }
707
708 butthigh_iirDescriptor =
709 (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor));
710
711 if (butthigh_iirDescriptor) {
712 butthigh_iirDescriptor->UniqueID = 1904;
713 butthigh_iirDescriptor->Label = "butthigh_iir";
714 butthigh_iirDescriptor->Properties =
715 LADSPA_PROPERTY_HARD_RT_CAPABLE;
716 butthigh_iirDescriptor->Name =
717 D_("GLAME Butterworth Highpass");
718 butthigh_iirDescriptor->Maker =
719 "Alexander Ehlert <mag@glame.de>";
720 butthigh_iirDescriptor->Copyright =
721 "GPL";
722 butthigh_iirDescriptor->PortCount = 4;
723
724 port_descriptors = (LADSPA_PortDescriptor *)calloc(4,
725 sizeof(LADSPA_PortDescriptor));
726 butthigh_iirDescriptor->PortDescriptors =
727 (const LADSPA_PortDescriptor *)port_descriptors;
728
729 port_range_hints = (LADSPA_PortRangeHint *)calloc(4,
730 sizeof(LADSPA_PortRangeHint));
731 butthigh_iirDescriptor->PortRangeHints =
732 (const LADSPA_PortRangeHint *)port_range_hints;
733
734 port_names = (char **)calloc(4, sizeof(char*));
735 butthigh_iirDescriptor->PortNames =
736 (const char **)port_names;
737
738 /* Parameters for Cutoff Frequency (Hz) */
739 port_descriptors[BUTTHIGH_IIR_CUTOFF] =
740 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
741 port_names[BUTTHIGH_IIR_CUTOFF] =
742 D_("Cutoff Frequency (Hz)");
743 port_range_hints[BUTTHIGH_IIR_CUTOFF].HintDescriptor =
744 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_LOW | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_LOGARITHMIC;
745 port_range_hints[BUTTHIGH_IIR_CUTOFF].LowerBound = 0.0001;
746 port_range_hints[BUTTHIGH_IIR_CUTOFF].UpperBound = 0.45;
747
748 /* Parameters for Resonance */
749 port_descriptors[BUTTHIGH_IIR_RESONANCE] =
750 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
751 port_names[BUTTHIGH_IIR_RESONANCE] =
752 D_("Resonance");
753 port_range_hints[BUTTHIGH_IIR_RESONANCE].HintDescriptor =
754 LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE;
755 port_range_hints[BUTTHIGH_IIR_RESONANCE].LowerBound = 0.1;
756 port_range_hints[BUTTHIGH_IIR_RESONANCE].UpperBound = 1.41;
757
758 /* Parameters for Input */
759 port_descriptors[BUTTHIGH_IIR_INPUT] =
760 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
761 port_names[BUTTHIGH_IIR_INPUT] =
762 D_("Input");
763 port_range_hints[BUTTHIGH_IIR_INPUT].HintDescriptor = 0;
764
765 /* Parameters for Output */
766 port_descriptors[BUTTHIGH_IIR_OUTPUT] =
767 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
768 port_names[BUTTHIGH_IIR_OUTPUT] =
769 D_("Output");
770 port_range_hints[BUTTHIGH_IIR_OUTPUT].HintDescriptor = 0;
771
772 butthigh_iirDescriptor->activate = activateButthigh_iir;
773 butthigh_iirDescriptor->cleanup = cleanupButthigh_iir;
774 butthigh_iirDescriptor->connect_port = connectPortButthigh_iir;
775 butthigh_iirDescriptor->deactivate = NULL;
776 butthigh_iirDescriptor->instantiate = instantiateButthigh_iir;
777 butthigh_iirDescriptor->run = runButthigh_iir;
778 butthigh_iirDescriptor->run_adding = runAddingButthigh_iir;
779 butthigh_iirDescriptor->set_run_adding_gain = setRunAddingGainButthigh_iir;
780 }
781 }
782
swh_fini()783 static void __attribute__((destructor)) swh_fini() {
784 if (bwxover_iirDescriptor) {
785 free((LADSPA_PortDescriptor *)bwxover_iirDescriptor->PortDescriptors);
786 free((char **)bwxover_iirDescriptor->PortNames);
787 free((LADSPA_PortRangeHint *)bwxover_iirDescriptor->PortRangeHints);
788 free(bwxover_iirDescriptor);
789 }
790 bwxover_iirDescriptor = NULL;
791 if (buttlow_iirDescriptor) {
792 free((LADSPA_PortDescriptor *)buttlow_iirDescriptor->PortDescriptors);
793 free((char **)buttlow_iirDescriptor->PortNames);
794 free((LADSPA_PortRangeHint *)buttlow_iirDescriptor->PortRangeHints);
795 free(buttlow_iirDescriptor);
796 }
797 buttlow_iirDescriptor = NULL;
798 if (butthigh_iirDescriptor) {
799 free((LADSPA_PortDescriptor *)butthigh_iirDescriptor->PortDescriptors);
800 free((char **)butthigh_iirDescriptor->PortNames);
801 free((LADSPA_PortRangeHint *)butthigh_iirDescriptor->PortRangeHints);
802 free(butthigh_iirDescriptor);
803 }
804 butthigh_iirDescriptor = NULL;
805
806 }
807