LMMS
Loading...
Searching...
No Matches
modules_filter.h
Go to the documentation of this file.
1/* Calf DSP plugin pack
2 * Equalization related plugins
3 *
4 * Copyright (C) 2001-2010 Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others
5 *
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.
10 *
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.
15 *
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 02111-1307, USA.
20 */
21#ifndef CALF_MODULES_FILTER_H
22#define CALF_MODULES_FILTER_H
23
24#include <assert.h>
25#include <limits.h>
26#include "biquad.h"
27#include "inertia.h"
28#include "audio_fx.h"
29#include "giface.h"
30#include "metadata.h"
31#include "plugin_tools.h"
32#include "loudness.h"
33#include "analyzer.h"
34#include "bypass.h"
35#include "orfanidis_eq.h"
36
37namespace calf_plugins {
38
39/**********************************************************************
40 * EQUALIZER N BAND by Markus Schmidt and Krzysztof Foltman
41**********************************************************************/
42
43template<class BaseClass, bool has_lphp>
45public:
47 using AM::ins;
48 using AM::outs;
49 using AM::params;
50 using AM::in_count;
51 using AM::out_count;
52 using AM::param_count;
53 using AM::PeakBands;
54private:
56 enum { graph_param_count = BaseClass::last_graph_param - BaseClass::first_graph_param + 1, params_per_band = AM::param_p2_active - AM::param_p1_active };
63 float p_level_old[PeakBands], p_freq_old[PeakBands], p_q_old[PeakBands];
67 dsp::biquad_d2 hp[3][2], lp[3][2];
69 dsp::biquad_d2 pL[PeakBands], pR[PeakBands];
72 mutable int last_peak;
73 inline void process_hplp(float &left, float &right);
74public:
80 void activate();
81 void deactivate();
82
84 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
85 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
86 bool get_layers(int index, int generation, unsigned int &layers) const;
87 float freq_gain(int index, double freq) const;
88 std::string get_crosshair_label(int x, int y, int sx, int sy, float q, int dB, int name, int note, int cents) const;
89
91 {
92 srate = sr;
93 _analyzer.set_sample_rate(sr);
94 int meter[] = {AM::param_meter_inL, AM::param_meter_inR, AM::param_meter_outL, AM::param_meter_outR};
95 int clip[] = {AM::param_clip_inL, AM::param_clip_inR, AM::param_clip_outL, AM::param_clip_outR};
96 meters.init(params, meter, clip, 4, sr);
97 }
98 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
99};
100
104
105/**********************************************************************
106 * EQUALIZER 30 BAND
107**********************************************************************/
108
136
137/**********************************************************************
138 * FILTER MODULE by Krzysztof Foltman
139**********************************************************************/
140
141template<typename FilterClass, typename Metadata>
142class filter_module_with_inertia: public audio_module<Metadata>, public FilterClass,
144{
145 using FilterClass::calculate_filter;
146 using FilterClass::freq_gain;
147public:
153
158
161
163 : inertia_cutoff(dsp::exponential_ramp(128), 20)
164 , inertia_resonance(dsp::exponential_ramp(128), 20)
165 , inertia_gain(dsp::exponential_ramp(128), 1.0)
166 , timer(128)
168 , last_generation(-1)
170 {}
171
173 {
174 float freq = inertia_cutoff.get_last();
175 // printf("freq=%g inr.cnt=%d timer.left=%d\n", freq, inertia_cutoff.count, timer.left);
176 // XXXKF this is resonance of a single stage, obviously for three stages, resonant gain will be different
177 float q = inertia_resonance.get_last();
178 int mode = dsp::fastf2i_drm(*params[Metadata::par_mode]);
179 // printf("freq = %f q = %f mode = %d\n", freq, q, mode);
180
181 int inertia = dsp::fastf2i_drm(*params[Metadata::par_inertia]);
182 if (inertia != inertia_cutoff.ramp.length()) {
183 inertia_cutoff.ramp.set_length(inertia);
184 inertia_resonance.ramp.set_length(inertia);
185 inertia_gain.ramp.set_length(inertia);
186 }
187
188 FilterClass::calculate_filter(freq, q, mode, inertia_gain.get_last());
189 }
190
191 virtual void params_changed()
192 {
194 }
195
196 void on_timer()
197 {
198 int gen = last_generation;
199 inertia_cutoff.step();
200 inertia_resonance.step();
201 inertia_gain.step();
204 }
205
206 void activate()
207 {
209 FilterClass::filter_activate();
210 timer = dsp::once_per_n(FilterClass::srate / 1000);
211 timer.start();
212 is_active = true;
213 }
214
216 {
217 FilterClass::srate = sr;
218 int meter[] = {Metadata::param_meter_inL, Metadata::param_meter_inR, Metadata::param_meter_outL, Metadata::param_meter_outR};
219 int clip[] = {Metadata::param_clip_inL, Metadata::param_clip_inR, Metadata::param_clip_outL, Metadata::param_clip_outR};
220 meters.init(params, meter, clip, 4, sr);
221 }
222
223
225 {
226 is_active = false;
227 }
228
229 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) {
230// printf("sr=%d cutoff=%f res=%f mode=%f\n", FilterClass::srate, *params[Metadata::par_cutoff], *params[Metadata::par_resonance], *params[Metadata::par_mode]);
231 uint32_t ostate = 0;
232 uint32_t orig_offset = offset, orig_numsamples = numsamples;
233 bool bypassed = bypass.update(*params[Metadata::param_bypass] > 0.5f, numsamples);
234 if (bypassed) {
235 float values[] = {0,0,0,0};
236 for (uint32_t i = offset; i < offset + numsamples; i++) {
237 outs[0][i] = ins[0][i];
238 if(outs[1])
239 outs[1][i] = ins[ins[1]?1:0][i];
240 meters.process(values);
241 ostate = -1;
242 }
243 } else {
244 numsamples += offset;
245 while(offset < numsamples) {
246 uint32_t numnow = numsamples - offset;
247 // if inertia's inactive, we can calculate the whole buffer at once
248 if (inertia_cutoff.active() || inertia_resonance.active() || inertia_gain.active())
249 numnow = timer.get(numnow);
250 if (outputs_mask & 1) {
251 ostate |= FilterClass::process_channel(0, ins[0] + offset, outs[0] + offset, numnow, inputs_mask & 1, *params[Metadata::param_level_in], *params[Metadata::param_level_out]);
252 }
253 if (outputs_mask & 2 && outs[1]) {
254 ostate |= FilterClass::process_channel(1, ins[(ins[1] ? 1 : 0)] + offset, outs[1] + offset, numnow, inputs_mask & 2, *params[Metadata::param_level_in], *params[Metadata::param_level_out]);
255 }
256 if (timer.elapsed()) {
257 on_timer();
258 }
259 for (uint32_t i = offset; i < offset + numnow; i++) {
260 float values[] = {
261 ins[0][i] * *params[Metadata::param_level_in],
262 (ins[ins[1]?1:0][i]) * *params[Metadata::param_level_in],
263 outs[0][i],
264 (outs[outs[1]?1:0][i])
265 };
266 meters.process(values);
267 }
268 offset += numnow;
269 }
270 bypass.crossfade(ins, outs, 1 + (int)(ins[1] && outs[1]), orig_offset, orig_numsamples);
271 }
272 meters.fall(orig_numsamples);
273 return ostate;
274 }
275 float freq_gain(int index, double freq) const {
276 return FilterClass::freq_gain(index, (float)freq, (float)FilterClass::srate);
277 }
278};
279
280/**********************************************************************
281 * FILTER by Krzysztof Foltman
282**********************************************************************/
283
285 public filter_module_with_inertia<dsp::biquad_filter_module, filter_metadata>
286{
288public:
290 {
291 last_generation = 0;
293 redraw_graph = true;
294 }
302};
303
304/**********************************************************************
305 * FILTERKLAVIER by Hans Baier
306**********************************************************************/
307
309 public filter_module_with_inertia<dsp::biquad_filter_module, filterclavier_metadata>
310{
314
315 const float min_gain;
316 const float max_gain;
317
320public:
322 void params_changed();
323 void activate();
324 void set_sample_rate(uint32_t sr);
325 void deactivate();
326
328 virtual void note_on(int channel, int note, int vel);
329 virtual void note_off(int channel, int note, int vel);
330private:
331 void adjust_gain_according_to_filter_mode(int velocity);
332};
333
334/**********************************************************************
335 * EMPHASIS by Damien Zammit
336**********************************************************************/
337
338class emphasis_audio_module: public audio_module<emphasis_metadata>, public frequency_response_line_graph {
339public:
348 void activate();
349 void deactivate();
350 void params_changed();
352 {
353 srate = sr;
354 int meter[] = {param_meter_inL, param_meter_inR, param_meter_outL, param_meter_outR};
355 int clip[] = {param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR};
356 meters.init(params, meter, clip, 4, sr);
357 }
358 virtual float freq_gain(int index, double freq) const {
359 return riaacurvL.freq_gain(freq, (float)srate);
360 }
361 virtual bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
362 virtual bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
363 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
364};
365
366/**********************************************************************
367 * CROSSOVER MODULES by Markus Schmidt
368**********************************************************************/
369
370template<class XoverBaseClass>
371class xover_audio_module: public audio_module<XoverBaseClass>, public frequency_response_line_graph {
372public:
374 using AM::ins;
375 using AM::outs;
376 using AM::params;
377 using AM::in_count;
378 using AM::out_count;
379 using AM::param_count;
380 using AM::bands;
381 using AM::channels;
382 enum { params_per_band = AM::param_level2 - AM::param_level1 };
385 float * buffer;
386 float in[channels];
387 unsigned int pos;
388 unsigned int buffer_size;
390 static inline float sign(float x) {
391 if(x < 0) return -1.f;
392 if(x > 0) return 1.f;
393 return 0.f;
394 }
399 void activate();
403 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
404 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
405 bool get_layers(int index, int generation, unsigned int &layers) const;
406};
407
411
412/**********************************************************************
413 * VOCODER by Markus Schmidt & Christian Holschuh
414**********************************************************************/
415
416class vocoder_audio_module: public audio_module<vocoder_metadata>, public frequency_response_line_graph {
417public:
420 float q_old[32];
421 float bandfreq[32];
424 static const int maxorder = 8;
427 double env_mods[2][32];
432 void activate();
433 void deactivate();
434 void params_changed();
435 int get_solo() const;
444 virtual bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
445 virtual bool get_layers(int index, int generation, unsigned int &layers) const;
446 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
447};
448
449/**********************************************************************
450 * ENVELOPE FILTER by Markus Schmidt
451**********************************************************************/
452
453class envelopefilter_audio_module: public audio_module<envelopefilter_metadata>, public dsp::biquad_filter_module,
455{
457public:
460
463
468
470 {
472 lower = 10; lower_old = 0;
473 upper = 10; upper_old = 0;
474 gain = 1; gain_old = 0;
476 mode = mode_old = q_old = 0;
477 coefa = coefb = 0;
478 coefz = 2;
479 }
480
481 void activate()
482 {
485 is_active = true;
486 }
487
489 {
490 is_active = false;
491 }
492
494 {
495 srate = sr;
497 int meter[] = {param_meter_inL, param_meter_inR, param_meter_outL, param_meter_outR};
498 int clip[] = {param_clip_inL, param_clip_inR, param_clip_outL, param_clip_outR};
499 meters.init(params, meter, clip, 4, sr);
500 }
501
503 {
504 if (*params[param_attack] != attack_old) {
506 attack = exp(log(0.01)/( attack_old * srate * 0.001));
507 }
510 release = exp(log(0.01)/( release_old * srate * 0.001));
511 }
512 if (*params[param_mode] != mode_old) {
515 calc_filter();
516 }
517 if (*params[param_q] != q_old) {
518 q_old = *params[param_q];
519 calc_filter();
520 }
521 if (*params[param_upper] != upper_old) {
524 calc_coef();
525 calc_filter();
526 }
527 if (*params[param_lower] != lower_old) {
530 calc_coef();
531 calc_filter();
532 }
533 if (*params[param_gain] != gain_old) {
536 calc_filter();
537 }
538 }
539
540 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
541 {
542 bool bypassed = bypass.update(*params[param_bypass] > 0.5f, numsamples);
543 uint32_t end = numsamples + offset;
544 while(offset < end) {
545 float D;
546 if (*params[param_sidechain] > 0.5)
547 D = std::max(fabs(ins[2][offset]), fabs(ins[3][offset])) * *params[param_gain];
548 else
549 D = std::max(fabs(ins[0][offset]), fabs(ins[1][offset])) * *params[param_gain];
550
551 // advance envelope
552 envelope = std::min(1.f, (D > envelope ? attack : release) * (envelope - D) + D);
553 if (envelope != envelope_old) {
555 redraw_graph = true;
557 }
558
559 if(bypassed) {
560 outs[0][offset] = ins[0][offset];
561 outs[1][offset] = ins[1][offset];
562 float values[] = {0, 0, 0, 0};
563 meters.process(values);
564 } else {
565 const float inL = ins[0][offset] * *params[param_level_in];
566 const float inR = ins[1][offset] * *params[param_level_in];
567 float outL = outs[0][offset];
568 float outR = outs[1][offset];
569
570 // process filters
571 dsp::biquad_filter_module::process_channel(0, &inL, &outL, 1, inputs_mask & 1);
572 dsp::biquad_filter_module::process_channel(1, &inR, &outR, 1, inputs_mask & 2);
573
574 // mix and out level
575 outs[0][offset] = (outL * *params[param_mix] + inL * (*params[param_mix] * -1 + 1)) * *params[param_level_out];
576 outs[1][offset] = (outR * *params[param_mix] + inR * (*params[param_mix] * -1 + 1)) * *params[param_level_out];
577
578 // meters
579 float values[] = {inL, inR, outs[0][offset], outs[1][offset]};
580 meters.process(values);
581 }
582 // step on
583 offset += 1;
584 }
585 if (bypassed)
586 bypass.crossfade(ins, outs, 2, offset - numsamples, numsamples);
587 meters.fall(numsamples);
588 return outputs_mask;
589 }
590
591 float freq_gain(int index, double freq) const {
592 return dsp::biquad_filter_module::freq_gain(index, (float)freq, (float)srate);
593 }
594
600
601 void calc_coef ()
602 {
603 coefa = log10(upper) - log10(lower);
604 coefb = log10(lower);
605 }
606
607 float get_freq(float envelope) const {
608 float diff = upper - lower;
609 float env = pow(envelope, pow(2, *params[param_response] * -2));
610 float freq = pow(10, coefa * env + coefb);
611 if (diff < 0)
612 return std::max(upper, std::min(lower, freq));
613 return std::min(upper, std::max(lower, freq));
614 }
615
616};
617
618};
619
620#endif
Definition orfanidis_eq.h:67
Definition orfanidis_eq.h:160
Definition analyzer.h:41
Empty implementations for plugin functions.
Definition giface.h:519
float * ins[(BaseClass::in_count !=0) ? BaseClass::in_count :1]
Definition giface.h:525
float * params[BaseClass::param_count]
Definition giface.h:527
float * outs[(BaseClass::out_count !=0) ? BaseClass::out_count :1]
Definition giface.h:526
audio_module()
Definition giface.h:533
uint32_t srate
Definition modules_filter.h:344
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.cpp:869
virtual bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_filter.cpp:935
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.h:351
dsp::riaacurve riaacurvR
Definition modules_filter.h:340
int type
Definition modules_filter.h:342
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:846
int bypass_
Definition modules_filter.h:342
emphasis_audio_module()
Definition modules_filter.cpp:837
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:858
bool is_active
Definition modules_filter.h:345
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:853
dsp::riaacurve riaacurvL
Definition modules_filter.h:340
dsp::bypass bypass
Definition modules_filter.h:341
virtual bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_filter.cpp:943
std::complex< double > cfloat
Definition modules_filter.h:343
virtual float freq_gain(int index, double freq) const
Definition modules_filter.h:358
vumeters meters
Definition modules_filter.h:346
int mode
Definition modules_filter.h:342
float lower_old
Definition modules_filter.h:465
float lower
Definition modules_filter.h:465
float q_old
Definition modules_filter.h:464
envelopefilter_audio_module()
Definition modules_filter.h:469
float upper
Definition modules_filter.h:465
float coefb
Definition modules_filter.h:466
void calc_coef()
Definition modules_filter.h:601
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.h:502
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.h:488
float gain_old
Definition modules_filter.h:465
float freq_gain(int index, double freq) const
Definition modules_filter.h:591
void calc_filter()
Definition modules_filter.h:595
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.h:540
uint32_t srate
Definition modules_filter.h:458
float envelope
Definition modules_filter.h:464
float coefa
Definition modules_filter.h:466
float get_freq(float envelope) const
Definition modules_filter.h:607
float attack_old
Definition modules_filter.h:464
float release_old
Definition modules_filter.h:464
float coefz
Definition modules_filter.h:466
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.h:481
float gain
Definition modules_filter.h:465
float upper_old
Definition modules_filter.h:465
float attack
Definition modules_filter.h:464
int mode_old
Definition modules_filter.h:467
float envelope_old
Definition modules_filter.h:464
int mode
Definition modules_filter.h:467
vumeters meters
Definition modules_filter.h:462
dsp::bypass bypass
Definition modules_filter.h:461
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.h:493
float release
Definition modules_filter.h:464
bool is_active
Definition modules_filter.h:459
OrfanidisEq::Conversions conv
Definition modules_filter.h:110
dsp::switcher< OrfanidisEq::filter_type > swR
Definition modules_filter.h:119
bool is_active
Definition modules_filter.h:123
std::vector< OrfanidisEq::Eq * > eq_arrR
Definition modules_filter.h:113
std::vector< OrfanidisEq::Eq * > eq_arrL
Definition modules_filter.h:112
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:593
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:588
dsp::switcher< OrfanidisEq::filter_type > swL
Definition modules_filter.h:118
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.cpp:653
uint32_t srate
Definition modules_filter.h:122
vumeters meters
Definition modules_filter.h:126
OrfanidisEq::filter_type flt_type
Definition modules_filter.h:115
~equalizer30band_audio_module()
Definition modules_filter.cpp:574
dsp::bypass bypass
Definition modules_filter.h:124
OrfanidisEq::filter_type flt_type_old
Definition modules_filter.h:116
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:583
equalizer30band_audio_module()
Definition modules_filter.cpp:531
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.cpp:669
OrfanidisEq::FrequencyGrid fg
Definition modules_filter.h:111
dsp::bypass eq_switch
Definition modules_filter.h:125
Definition modules_filter.h:44
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_filter.cpp:482
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_filter.cpp:492
dsp::biquad_d2 pR[PeakBands]
Definition modules_filter.h:69
audio_module< BaseClass > AM
Definition modules_filter.h:46
dsp::biquad_d2 lp[3][2]
Definition modules_filter.h:67
std::complex< double > cfloat
Definition modules_filter.h:75
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:86
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:119
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.h:90
float old_params_for_graph[graph_param_count]
Definition modules_filter.h:64
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:94
dsp::biquad_d2 pL[PeakBands]
Definition modules_filter.h:69
dsp::biquad_d2 hp[3][2]
Definition modules_filter.h:67
float freq_gain(int index, double freq) const
Definition modules_filter.cpp:500
void process_hplp(float &left, float &right)
Definition modules_filter.cpp:207
equalizerNband_audio_module()
Definition modules_filter.cpp:61
volatile int last_calculated_generation
Definition modules_filter.h:78
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_filter.cpp:396
std::string get_crosshair_label(int x, int y, int sx, int sy, float q, int dB, int name, int note, int cents) const
Definition modules_filter.cpp:516
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.cpp:268
filter_audio_module()
Definition modules_filter.h:289
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.h:295
float old_cutoff
Definition modules_filter.h:287
float old_resonance
Definition modules_filter.h:287
float old_mode
Definition modules_filter.h:287
void calculate_filter()
Definition modules_filter.h:172
dsp::inertia< dsp::exponential_ramp > inertia_gain
Definition modules_filter.h:154
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.h:215
float freq_gain(int index, double freq) const
Definition modules_filter.h:275
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.h:224
filter_module_with_inertia inertia_filter_module
These are pointers to the ins, outs, params arrays in the main class.
Definition modules_filter.h:149
void on_timer()
Definition modules_filter.h:196
bool is_active
Definition modules_filter.h:156
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.h:229
volatile int last_generation
Definition modules_filter.h:157
dsp::inertia< dsp::exponential_ramp > inertia_cutoff
Definition modules_filter.h:154
vumeters meters
Definition modules_filter.h:160
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.h:206
virtual void params_changed()
Called when params are changed (before processing).
Definition modules_filter.h:191
filter_module_with_inertia()
Definition modules_filter.h:162
volatile int last_calculated_generation
Definition modules_filter.h:157
dsp::bypass bypass
Definition modules_filter.h:159
dsp::once_per_n timer
Definition modules_filter.h:155
dsp::inertia< dsp::exponential_ramp > inertia_resonance
Definition modules_filter.h:154
int last_velocity
Definition modules_filter.h:319
filterclavier_audio_module()
Definition modules_filter.cpp:736
virtual void note_off(int channel, int note, int vel)
Handle MIDI Note Off.
Definition modules_filter.cpp:800
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:772
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:744
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:762
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.cpp:767
const float min_gain
Definition modules_filter.h:315
int last_note
Definition modules_filter.h:318
const float max_gain
Definition modules_filter.h:316
virtual void note_on(int channel, int note, int vel)
MIDI control.
Definition modules_filter.cpp:778
void adjust_gain_according_to_filter_mode(int velocity)
Definition modules_filter.cpp:811
Line graph interface implementation for frequency response graphs.
Definition giface.h:777
bool redraw_graph
Definition giface.h:779
virtual bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_filter.cpp:1358
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.h:436
double env_mods[2][32]
Definition modules_filter.h:427
int bands
Definition modules_filter.h:418
dsp::biquad_d2 detector[2][maxorder][32]
Definition modules_filter.h:425
int hiq_old
Definition modules_filter.h:418
bool is_active
Definition modules_filter.h:423
int get_solo() const
Definition modules_filter.cpp:1183
float order_old
Definition modules_filter.h:419
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.cpp:1190
int order
Definition modules_filter.h:418
analyzer _analyzer
Definition modules_filter.h:429
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:1124
double release
Definition modules_filter.h:430
uint32_t srate
Definition modules_filter.h:422
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:1129
vocoder_audio_module()
Definition modules_filter.cpp:1102
float upper_old
Definition modules_filter.h:419
int bands_old
Definition modules_filter.h:418
vumeters meters
Definition modules_filter.h:428
double fcoeff
Definition modules_filter.h:430
float bandfreq[32]
Definition modules_filter.h:421
dsp::biquad_d2 modulator[2][maxorder][32]
Definition modules_filter.h:425
double attack
Definition modules_filter.h:430
dsp::bypass bypass
Definition modules_filter.h:426
double log2_
Definition modules_filter.h:430
static const int maxorder
Definition modules_filter.h:424
virtual bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_filter.cpp:1397
float q_old[32]
Definition modules_filter.h:420
float lower_old
Definition modules_filter.h:419
float tilt_old
Definition modules_filter.h:419
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:1119
Definition plugin_tools.h:32
Definition modules_filter.h:371
audio_module< XoverBaseClass > AM
Definition modules_filter.h:373
vumeters meters
Definition modules_filter.h:395
uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_filter.cpp:1022
@ params_per_band
Definition modules_filter.h:382
dsp::crossover crossover
Definition modules_filter.h:396
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_filter.cpp:1081
bool is_active
Definition modules_filter.h:384
void params_changed()
Called when params are changed (before processing).
Definition modules_filter.cpp:1006
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_filter.cpp:981
xover_audio_module()
Definition modules_filter.cpp:955
unsigned int pos
Definition modules_filter.h:387
static float sign(float x)
Definition modules_filter.h:390
int last_peak
Definition modules_filter.h:389
uint32_t srate
Definition modules_filter.h:383
void deactivate()
LADSPA-esque deactivate function.
Definition modules_filter.cpp:976
unsigned int buffer_size
Definition modules_filter.h:388
float in[channels]
Definition modules_filter.h:386
float * buffer
Definition modules_filter.h:385
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_filter.cpp:969
~xover_audio_module()
Definition modules_filter.cpp:964
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_filter.cpp:1086
Definition audio_fx.h:453
float freq_gain(int subindex, float freq, float srate) const
Determine gain (|H(z)|) for a given frequency.
Definition audio_fx.cpp:259
int process_channel(uint16_t channel_no, const float *in, float *out, uint32_t numsamples, int inmask, float lvl_in=1., float lvl_out=1.)
Process a single channel (float buffer) of data.
Definition audio_fx.cpp:181
uint32_t srate
Definition audio_fx.h:459
void filter_activate()
Reset filter state.
Definition audio_fx.cpp:165
void calculate_filter(float freq, float q, int mode, float gain=1.0)
Calculate filter coefficients based on parameters - cutoff/center frequency, q, filter type,...
Definition audio_fx.cpp:139
Definition bypass.h:9
Definition audio_fx.h:634
Definition inertia.h:108
Definition inertia.h:204
Definition loudness.h:93
Definition inertia.h:258
int y
Definition inflate.c:1588
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
struct @113205115357366127300225113341150224053346037032::@137033172036070230260373056156374243321245367362 left
struct @113205115357366127300225113341150224053346037032::@137033172036070230260373056156374243321245367362 right
static const char * name
Definition pugl.h:1582
JHUFF_TBL long freq[]
Definition jchuff.h:50
JSAMPIMAGE data
Definition jpeglib.h:945
std::map< MetadataKey, MetadataValue > Metadata
Definition libjack_metadata.cpp:60
unsigned int uint32_t
Definition mid.cpp:100
filter_type
Definition orfanidis_eq.h:1115
Definition benchmark.cpp:53
xover_audio_module< xover3_metadata > xover3_audio_module
Definition modules_filter.h:409
equalizerNband_audio_module< equalizer5band_metadata, false > equalizer5band_audio_module
Definition modules_filter.h:101
xover_audio_module< xover2_metadata > xover2_audio_module
Definition modules_filter.h:408
CalfEqMode
Definition metadata.h:178
equalizerNband_audio_module< equalizer12band_metadata, true > equalizer12band_audio_module
Definition modules_filter.h:103
equalizerNband_audio_module< equalizer8band_metadata, true > equalizer8band_audio_module
Definition modules_filter.h:102
xover_audio_module< xover4_metadata > xover4_audio_module
Definition modules_filter.h:410
Definition audio_fx.h:36
int fastf2i_drm(float f)
fast float to int conversion using default rounding mode
Definition primitives.h:445
#define false
Definition ordinals.h:83
static bool diff(const std::string fn1, const std::string fn2)
Definition playertest.cpp:161
png_structrp int mode
Definition png.h:1139
Definition giface.h:160
@ param_mode
Definition metadata.h:86
@ param_gain
Definition metadata.h:88
@ param_mix
Definition metadata.h:86
@ param_attack
Definition metadata.h:87
@ param_sidechain
Definition metadata.h:89
@ param_bypass
Definition metadata.h:84
@ param_release
Definition metadata.h:87
@ param_level_in
Definition metadata.h:84
@ param_upper
Definition metadata.h:88
@ param_q
Definition metadata.h:86
@ param_response
Definition metadata.h:89
@ param_level_out
Definition metadata.h:84
@ param_lower
Definition metadata.h:88
@ par_cutoff
Definition metadata.h:57
@ par_resonance
Definition metadata.h:57
Filterclavier - metadata.
Definition metadata.h:69
@ param_outR
Definition metadata.h:612
@ param_mod_clip_inR
Definition metadata.h:611
@ param_mod_clip_inL
Definition metadata.h:611
@ param_clip_outR
Definition metadata.h:612
@ param_carrier_clip_inL
Definition metadata.h:610
@ param_carrier_clip_inR
Definition metadata.h:610
@ param_carrier_inL
Definition metadata.h:610
@ param_mod_inR
Definition metadata.h:611
@ param_clip_outL
Definition metadata.h:612
@ param_mod_inL
Definition metadata.h:611
@ param_carrier_inR
Definition metadata.h:610
@ param_outL
Definition metadata.h:612
Definition biquad.h:430
Definition globals.h:33
static float D(float x)
Definition tap_tubewarmth.c:156
register uch * q
Definition fileio.c:817