LMMS
Loading...
Searching...
No Matches
modules_mod.h
Go to the documentation of this file.
1/* Calf DSP plugin pack
2 * Modulation effect 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_MOD_H
22#define CALF_MODULES_MOD_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 "multichorus.h"
32#include "plugin_tools.h"
33#include "bypass.h"
34
35namespace calf_plugins {
36
37/**********************************************************************
38 * FLANGER by Krzysztof Foltman
39**********************************************************************/
40
42{
43public:
50public:
52 is_active = false;
53 }
55 void params_changed();
56 void params_reset();
57 void activate();
58 void deactivate();
59 uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) {
60 left.process(outs[0] + offset, ins[0] + offset, nsamples, *params[param_on] > 0.5, *params[param_level_in], *params[param_level_out]);
61 right.process(outs[1] + offset, ins[1] + offset, nsamples, *params[param_on] > 0.5, *params[param_level_in], *params[param_level_out]);
62 for (uint32_t i = offset; i < offset + nsamples; i++) {
63 float values[] = {ins[0][i] * *params[param_level_in], ins[1][i] * *params[param_level_in], outs[0][i], outs[1][i]};
64 meters.process(values);
65 }
66 meters.fall(nsamples);
67 return outputs_mask; // XXXKF allow some delay after input going blank
68 }
69 bool get_layers(int index, int generation, unsigned int &layers) const;
70 float freq_gain(int subindex, double freq) const;
71 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
72 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
73};
74
75/**********************************************************************
76 * PHASER by Krzysztof Foltman
77**********************************************************************/
78
80{
81public:
82 enum { MaxStages = 12 };
91public:
93 void params_changed();
94 void params_reset();
95 void activate();
97 void deactivate();
98 uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask) {
99 left.process(outs[0] + offset, ins[0] + offset, nsamples, *params[param_on] > 0.5, *params[param_level_in], *params[param_level_out]);
100 right.process(outs[1] + offset, ins[1] + offset, nsamples, *params[param_on] > 0.5, *params[param_level_in], *params[param_level_out]);
101 for (uint32_t i = offset; i < offset + nsamples; i++) {
102 float values[] = {ins[0][i] * *params[param_level_in], ins[1][i] * *params[param_level_in], outs[0][i], outs[1][i]};
103 meters.process(values);
104 }
105 meters.fall(nsamples);
106 return outputs_mask; // XXXKF allow some delay after input going blank
107 }
108 bool get_layers(int index, int generation, unsigned int &layers) const;
109 float freq_gain(int subindex, double freq) const;
110 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
111 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
112};
113
114/**********************************************************************
115 * ROTARY SPEAKER by Krzysztof Foltman
116**********************************************************************/
117
118class rotary_speaker_audio_module: public audio_module<rotary_speaker_metadata>
119{
120public:
135 float aspeed_l;
137 float aspeed_h;
139 float dspeed;
144
146
148 void set_sample_rate(uint32_t sr);
149 void setup();
150 void activate();
151 void deactivate();
152
153 void params_changed();
154 void set_vibrato();
156 uint32_t rpm2dphase(float rpm);
158 void update_speed();
159 void update_speed_manual(float delta);
161 bool incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc);
162 uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask);
163 virtual void control_change(int channel, int ctl, int val);
164};
165
166/**********************************************************************
167 * MULTI CHORUS by Krzysztof Foltman
168**********************************************************************/
169
170class multichorus_audio_module: public audio_module<multichorus_metadata>, public frequency_response_line_graph
171{
172public:
176 float cutoff;
179 mutable bool redraw_sine;
182public:
184 void params_changed();
185 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
186 void activate();
187 void deactivate();
188 void set_sample_rate(uint32_t sr);
189 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
190 float freq_gain(int subindex, double freq) const;
191 bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const;
192 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
193 bool get_layers(int index, int generation, unsigned int &layers) const;
194};
195
196/**********************************************************************
197 * PULSATOR by Markus Schmidt
198**********************************************************************/
199
200class pulsator_audio_module: public audio_module<pulsator_metadata>, public frequency_response_line_graph {
201private:
209public:
213 void activate();
214 void deactivate();
215 void params_changed();
216 void set_sample_rate(uint32_t sr);
218 {
219 if (clear_reset) {
220 *params[param_reset] = 0.f;
221 clear_reset = false;
222 }
223 }
224 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
225 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
226 bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const;
227 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
228 bool get_layers(int index, int generation, unsigned int &layers) const;
229};
230
231
232/**********************************************************************
233 * RING MODULATOR by Markus Schmidt
234**********************************************************************/
235
236class ringmodulator_audio_module: public audio_module<ringmodulator_metadata>, public frequency_response_line_graph {
237private:
242public:
246 void activate();
247 void deactivate();
248 void params_changed();
249 void set_sample_rate(uint32_t sr);
251 {
252 if (clear_reset) {
253 *params[param_lfo1_reset] = 0.f;
254 *params[param_lfo2_reset] = 0.f;
255 clear_reset = false;
256 }
257 }
258 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
259 bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const;
260 bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const;
261 bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const;
262 bool get_layers(int index, int generation, unsigned int &layers) const;
263};
264
265};
266
267#endif
float * ins[(flanger_metadata::in_count !=0) ? flanger_metadata::in_count :1]
Definition giface.h:525
float * params[flanger_metadata::param_count]
Definition giface.h:527
float * outs[(flanger_metadata::out_count !=0) ? flanger_metadata::out_count :1]
Definition giface.h:526
bool clear_reset
Definition modules_mod.h:46
void params_reset()
Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead...
Definition modules_mod.cpp:96
dsp::simple_flanger< float, 2048 > right
Definition modules_mod.h:44
vumeters meters
Definition modules_mod.h:49
uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_mod.h:59
float freq_gain(int subindex, double freq) const
Definition modules_mod.cpp:121
dsp::simple_flanger< float, 2048 > left
Definition modules_mod.h:44
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_mod.cpp:116
bool is_active
Definition modules_mod.h:48
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_mod.cpp:110
float last_r_phase
Definition modules_mod.h:47
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:64
uint32_t srate
Definition modules_mod.h:45
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_mod.cpp:103
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:42
flanger_audio_module()
Definition modules_mod.h:51
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:51
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:60
Line graph interface implementation for frequency response graphs.
Definition giface.h:777
float freq_gain(int subindex, double freq) const
Definition modules_mod.cpp:630
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:469
bool is_active
Definition modules_mod.h:177
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:475
uint32_t srate
Definition modules_mod.h:173
dsp::multichorus< float, dsp::sine_multi_lfo< float, 8 >, dsp::filter_sum< dsp::biquad_d2, dsp::biquad_d2 >, 4096 > left
Definition modules_mod.h:174
float freq2_old
Definition modules_mod.h:178
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_mod.cpp:542
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:480
vumeters meters
Definition modules_mod.h:181
float cutoff
Definition modules_mod.h:176
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_mod.cpp:530
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:490
multichorus_audio_module()
Definition modules_mod.cpp:460
float last_r_phase
Definition modules_mod.h:175
float q_old
Definition modules_mod.h:178
bool redraw_sine
Definition modules_mod.h:179
dsp::bypass bypass
Definition modules_mod.h:180
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_mod.cpp:559
float freq_old
Definition modules_mod.h:178
dsp::multichorus< float, dsp::sine_multi_lfo< float, 8 >, dsp::filter_sum< dsp::biquad_d2, dsp::biquad_d2 >, 4096 > right
Definition modules_mod.h:174
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_mod.cpp:623
bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const
Definition modules_mod.cpp:593
float x1vals[2][MaxStages]
Definition modules_mod.h:87
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:139
float last_r_phase
Definition modules_mod.h:85
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_mod.cpp:204
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:149
vumeters meters
Definition modules_mod.h:90
@ MaxStages
Definition modules_mod.h:82
dsp::simple_phaser right
Definition modules_mod.h:86
dsp::simple_phaser left
Definition modules_mod.h:86
uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_mod.h:98
float y1vals[2][MaxStages]
Definition modules_mod.h:87
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:164
void params_reset()
Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead...
Definition modules_mod.cpp:197
uint32_t srate
Definition modules_mod.h:83
phaser_audio_module()
Definition modules_mod.cpp:132
bool clear_reset
Definition modules_mod.h:84
bool is_active
Definition modules_mod.h:88
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:159
dsp::bypass bypass
Definition modules_mod.h:89
float freq_gain(int subindex, double freq) const
Definition modules_mod.cpp:223
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_mod.cpp:210
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_mod.cpp:217
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:661
dsp::bypass bypass
Definition modules_mod.h:207
dsp::simple_lfo lfoR
Definition modules_mod.h:206
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:654
pulsator_audio_module()
Definition modules_mod.cpp:641
bool is_active
Definition modules_mod.h:211
vumeters meters
Definition modules_mod.h:208
void params_reset()
Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead...
Definition modules_mod.h:217
int amount_old
Definition modules_mod.h:204
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:713
int pwidth_old
Definition modules_mod.h:204
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_mod.cpp:721
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_mod.cpp:788
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_mod.cpp:806
uint32_t srate
Definition modules_mod.h:210
pulsator_audio_module AM
Definition modules_mod.h:202
float freq_old
Definition modules_mod.h:203
bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const
Definition modules_mod.cpp:798
int mode_old
Definition modules_mod.h:204
float offset_r_old
Definition modules_mod.h:203
dsp::simple_lfo lfoL
Definition modules_mod.h:206
float offset_l_old
Definition modules_mod.h:203
bool clear_reset
Definition modules_mod.h:205
int reset_old
Definition modules_mod.h:204
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_mod.cpp:814
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:668
bool get_dot(int index, int subindex, int phase, float &x, float &y, int &size, cairo_iface *context) const
Definition modules_mod.cpp:1004
uint32_t srate
Definition modules_mod.h:243
dsp::simple_lfo lfo2
Definition modules_mod.h:239
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:872
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:849
bool get_layers(int index, int generation, unsigned int &layers) const
Definition modules_mod.cpp:1020
dsp::bypass bypass
Definition modules_mod.h:240
void params_reset()
Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead...
Definition modules_mod.h:250
bool clear_reset
Definition modules_mod.h:238
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:831
dsp::simple_lfo modL
Definition modules_mod.h:239
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:840
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_mod.cpp:880
ringmodulator_audio_module()
Definition modules_mod.cpp:825
bool get_gridline(int index, int subindex, int phase, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const
Definition modules_mod.cpp:1012
dsp::simple_lfo modR
Definition modules_mod.h:239
vumeters meters
Definition modules_mod.h:241
bool is_active
Definition modules_mod.h:244
bool get_graph(int index, int subindex, int phase, float *data, int points, cairo_iface *context, int *mode) const
Definition modules_mod.cpp:994
dsp::simple_lfo lfo1
Definition modules_mod.h:239
float mwhl_value
Current CC1 (Modulation) value, normalized to [0, 1].
Definition modules_mod.h:131
void deactivate()
LADSPA-esque deactivate function.
Definition modules_mod.cpp:266
dsp::biquad_d2 crossover1l
Definition modules_mod.h:124
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_mod.cpp:259
dsp::biquad_d2 crossover2r
Definition modules_mod.h:124
void update_speed_manual(float delta)
Definition modules_mod.cpp:325
dsp::biquad_d2 crossover1r
Definition modules_mod.h:124
float dspeed
Desired speed (0=slow, 1=fast) - automatic mode.
Definition modules_mod.h:139
float maspeed_h
Current rotation speed for treble rotor - manual mode.
Definition modules_mod.h:143
uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask)
The audio processing loop; assumes numsamples <= MAX_SAMPLE_RUN, for larger buffers,...
Definition modules_mod.cpp:358
float aspeed_l
Current rotation speed for bass rotor - automatic mode.
Definition modules_mod.h:135
int vibrato_mode
Definition modules_mod.h:129
int meter_l
Definition modules_mod.h:145
uint32_t srate
Definition modules_mod.h:126
uint32_t rpm2dphase(float rpm)
Convert RPM speed to delta-phase.
Definition modules_mod.cpp:311
void setup()
Definition modules_mod.cpp:251
rotary_speaker_audio_module()
Definition modules_mod.cpp:233
dsp::biquad_d2 crossover2l
Definition modules_mod.h:124
dsp::simple_delay< 1024, float > delay
Definition modules_mod.h:123
float maspeed_l
Current rotation speed for bass rotor - manual mode.
Definition modules_mod.h:141
uint32_t dphase_l
Definition modules_mod.h:122
bool incr_towards(float &aspeed, float raspeed, float delta_decc, float delta_acc)
Increase or decrease aspeed towards raspeed, with required negative and positive rate.
Definition modules_mod.cpp:344
uint32_t phase_h
Definition modules_mod.h:122
float hold_value
Current CC64 (Hold) value, normalized to [0, 1].
Definition modules_mod.h:133
dsp::bypass bypass
Definition modules_mod.h:127
dsp::simple_delay< 8, float > phaseshift
Definition modules_mod.h:125
dsp::biquad_d2 damper1r
Definition modules_mod.h:124
void set_vibrato()
Definition modules_mod.cpp:291
int meter_h
Definition modules_mod.h:145
dsp::biquad_d2 damper1l
Definition modules_mod.h:124
void update_speed()
Set delta-phase variables based on current calculated (and interpolated) RPM speed.
Definition modules_mod.cpp:317
uint32_t phase_l
Current phases and phase deltas for bass and treble rotors.
Definition modules_mod.h:122
void params_changed()
Called when params are changed (before processing).
Definition modules_mod.cpp:286
vumeters meters
Definition modules_mod.h:128
virtual void control_change(int channel, int ctl, int val)
Handle MIDI Control Change.
Definition modules_mod.cpp:270
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_mod.cpp:242
uint32_t dphase_h
Definition modules_mod.h:122
float aspeed_h
Current rotation speed for treble rotor - automatic mode.
Definition modules_mod.h:137
Definition plugin_tools.h:32
Definition bypass.h:9
Compose two filters in parallel.
Definition biquad.h:625
Definition multichorus.h:112
Definition audio_fx.h:239
Definition audio_fx.h:530
Definition audio_fx.h:109
int y
Definition inflate.c:1588
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
JHUFF_TBL long freq[]
Definition jchuff.h:50
int val
Definition jpeglib.h:956
JSAMPIMAGE data
Definition jpeglib.h:945
unsigned int uint32_t
Definition mid.cpp:100
Definition benchmark.cpp:53
png_structrp int mode
Definition png.h:1139
Definition giface.h:160
@ param_level_out
Definition metadata.h:38
@ param_on
Definition metadata.h:38
@ param_level_in
Definition metadata.h:38
@ param_level_out
Definition metadata.h:48
@ param_level_in
Definition metadata.h:48
@ param_on
Definition metadata.h:48
@ param_reset
Definition metadata.h:659
@ param_lfo1_reset
Definition metadata.h:672
@ param_lfo2_reset
Definition metadata.h:677
Definition biquad.h:430
Definition delay.h:41
ulg size
Definition extract.c:2350