LMMS
Loading...
Searching...
No Matches
modules_delay.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 02110-1301 USA
20 */
21
22#ifndef CALF_MODULES_DELAY_H
23#define CALF_MODULES_DELAY_H
24
25#include <assert.h>
26#include <limits.h>
27#include "biquad.h"
28#include "bypass.h"
29#include "inertia.h"
30#include "audio_fx.h"
31#include "giface.h"
32#include "metadata.h"
33#include "loudness.h"
34#include <math.h>
35#include "plugin_tools.h"
36
37namespace calf_plugins {
38
40
41/**********************************************************************
42 * REVERB by Krzysztof Foltman
43**********************************************************************/
44
62
63/**********************************************************************
64 * VINTAGE DELAY by Krzysztof Foltman
65**********************************************************************/
66
67class vintage_delay_audio_module: public audio_module<vintage_delay_metadata>, public frequency_response_line_graph
68{
69public:
70 // 1MB of delay memory per channel... uh, RAM is cheap
71 enum { MAX_DELAY = 524288, ADDR_MASK = MAX_DELAY - 1 };
74 float buffers[2][MAX_DELAY];
77 int age;
78
80
82
84
86
87 void params_changed();
88 void activate();
89 void deactivate();
91 void calc_filters();
92 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
93 virtual char *configure(const char *key, const char *value);
94
97
99};
100
101/**********************************************************************
102 * COMPENSATION DELAY LINE by Vladimir Sadovnikov
103**********************************************************************/
104
105// The maximum distance for knobs
106#define COMP_DELAY_MAX_DISTANCE (100.0 * 100.0 + 100.0 * 1.0 + 1.0)
107// The actual speed of sound in normal conditions
108#define COMP_DELAY_SOUND_SPEED_KM_H(temp) 1.85325 * (643.95 * std::pow(((temp + 273.15) / 273.15), 0.5))
109#define COMP_DELAY_SOUND_SPEED_CM_S(temp) (COMP_DELAY_SOUND_SPEED_KM_H(temp) * (1000.0 * 100.0) /* cm/km */ / (60.0 * 60.0) /* s/h */)
110#define COMP_DELAY_SOUND_FRONT_DELAY(temp) (1.0 / COMP_DELAY_SOUND_SPEED_CM_S(temp))
111// The maximum delay may be reached by this plugin
112#define COMP_DELAY_MAX_DELAY (COMP_DELAY_MAX_DISTANCE*COMP_DELAY_SOUND_FRONT_DELAY(50))
113
114class comp_delay_audio_module: public audio_module<comp_delay_metadata>
115{
116public:
117 float *buffer;
119 uint32_t buf_size; // guaranteed to be power of 2
124
126 virtual ~comp_delay_audio_module();
127
128 void params_changed();
129 void activate();
130 void deactivate();
131 void set_sample_rate(uint32_t sr);
132 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
133};
135
136/**********************************************************************
137 * HAAS enhancer by Vladimir Sadovnikov
138**********************************************************************/
139#define HAAS_ENHANCER_MAX_DELAY (10 * 0.001) /* 10 MSec */
140
141class haas_enhancer_audio_module: public audio_module<haas_enhancer_metadata>
142{
143public:
144 float *buffer;
146 uint32_t buf_size; // guaranteed to be power of 2
148
151
153 float s_bal_l[2], s_bal_r[2];
154
157
158 void params_changed();
159 void activate();
160 void deactivate();
161 void set_sample_rate(uint32_t sr);
162 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
163};
164
165/**********************************************************************
166 * REVERSE DELAY
167**********************************************************************/
168
169class reverse_delay_audio_module: public audio_module<reverse_delay_metadata>
170{
171public:
172 enum { MAX_DELAY = 6144000, ADDR_MASK = MAX_DELAY - 1 };
174 int counters[2];
177
180
182
183 float feedback_buf[2];
184
186
188
190
191 void params_changed();
192 void activate();
193 void deactivate();
194 void set_sample_rate(uint32_t sr);
195 uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
196};
198
199};
200#endif
Definition modules_delay.h:115
uint32_t srate
Definition modules_delay.h:118
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_delay.cpp:432
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_delay.cpp:396
float * buffer
Definition modules_delay.h:117
uint32_t delay
Definition modules_delay.h:120
dsp::bypass bypass
Definition modules_delay.h:122
uint32_t buf_size
Definition modules_delay.h:119
comp_delay_audio_module()
Definition modules_delay.cpp:370
uint32_t write_ptr
Definition modules_delay.h:121
virtual ~comp_delay_audio_module()
Definition modules_delay.cpp:378
vumeters meters
Definition modules_delay.h:123
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_delay.cpp:405
void deactivate()
LADSPA-esque deactivate function.
Definition modules_delay.cpp:401
void params_changed()
Called when params are changed (before processing).
Definition modules_delay.cpp:384
Line graph interface implementation for frequency response graphs.
Definition giface.h:777
uint32_t write_ptr
Definition modules_delay.h:147
uint32_t srate
Definition modules_delay.h:145
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_delay.cpp:539
uint32_t buf_size
Definition modules_delay.h:146
float * buffer
Definition modules_delay.h:144
void deactivate()
LADSPA-esque deactivate function.
Definition modules_delay.cpp:535
dsp::bypass bypass
Definition modules_delay.h:149
haas_enhancer_audio_module()
Definition modules_delay.cpp:490
float s_bal_r[2]
Definition modules_delay.h:153
virtual ~haas_enhancer_audio_module()
Definition modules_delay.cpp:506
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_delay.cpp:566
void params_changed()
Called when params are changed (before processing).
Definition modules_delay.cpp:515
uint32_t s_delay[2]
Definition modules_delay.h:152
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_delay.cpp:530
vumeters meters
Definition modules_delay.h:150
uint32_t m_source
Definition modules_delay.h:152
float s_bal_l[2]
Definition modules_delay.h:153
Definition modules_delay.h:46
dsp::reverb reverb
Definition modules_delay.h:49
void deactivate()
LADSPA-esque deactivate function.
Definition modules_delay.cpp:51
dsp::gain_smoothing dryamount
Definition modules_delay.h:53
void params_changed()
Called when params are changed (before processing).
Definition modules_delay.cpp:65
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_delay.cpp:46
dsp::onepole< float > left_hi
Definition modules_delay.h:51
int predelay_amt
Definition modules_delay.h:54
vumeters meters
Definition modules_delay.h:47
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_delay.cpp:55
uint32_t srate
Definition modules_delay.h:52
dsp::onepole< float > left_lo
Definition modules_delay.h:51
dsp::simple_delay< 131072, dsp::stereo_sample< float > > pre_delay
Definition modules_delay.h:50
dsp::onepole< float > right_lo
Definition modules_delay.h:51
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_delay.cpp:79
dsp::onepole< float > right_hi
Definition modules_delay.h:51
dsp::gain_smoothing amount
Definition modules_delay.h:53
Definition modules_delay.h:170
int deltime_l
Definition modules_delay.h:176
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_delay.cpp:695
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_delay.cpp:687
float buffers[2][MAX_DELAY]
Definition modules_delay.h:173
void deactivate()
LADSPA-esque deactivate function.
Definition modules_delay.cpp:691
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_delay.cpp:726
dsp::overlap_window ow[2]
Definition modules_delay.h:175
dsp::gain_smoothing dry
Definition modules_delay.h:181
void params_changed()
Called when params are changed (before processing).
Definition modules_delay.cpp:653
dsp::gain_smoothing fb_val
Definition modules_delay.h:181
uint32_t line_state_old
Definition modules_delay.h:187
uint32_t srate
Definition modules_delay.h:185
int counters[2]
Definition modules_delay.h:174
vumeters meters
Definition modules_delay.h:179
int deltime_r
Definition modules_delay.h:176
float feedback_buf[2]
Definition modules_delay.h:183
@ MAX_DELAY
Definition modules_delay.h:172
@ ADDR_MASK
Definition modules_delay.h:172
dsp::bypass bypass
Definition modules_delay.h:178
dsp::gain_smoothing width
Definition modules_delay.h:181
reverse_delay_audio_module()
Definition modules_delay.cpp:639
float buffers[2][MAX_DELAY]
Definition modules_delay.h:74
dsp::gain_smoothing fb_right
Definition modules_delay.h:79
long _tap_last
Definition modules_delay.h:96
int old_medium
Definition modules_delay.h:75
vintage_delay_audio_module()
Definition modules_delay.cpp:119
int medium
Definition modules_delay.h:75
@ FRAG_PATTERN
Definition modules_delay.h:73
@ FRAG_PERIODIC
Definition modules_delay.h:73
dsp::gain_smoothing amt_right
Definition modules_delay.h:79
dsp::biquad_d2 biquad_left[2]
Definition modules_delay.h:81
void activate()
LADSPA-esque activate function, except it is called after ports are connected, not before.
Definition modules_delay.cpp:203
void params_changed()
Called when params are changed (before processing).
Definition modules_delay.cpp:145
virtual char * configure(const char *key, const char *value)
DSSI configure call.
Definition modules_delay.cpp:130
void calc_filters()
Definition modules_delay.cpp:225
dsp::gain_smoothing chmix
Definition modules_delay.h:79
dsp::gain_smoothing amt_left
Definition modules_delay.h:79
dsp::gain_smoothing dry
Definition modules_delay.h:79
@ ADDR_MASK
Definition modules_delay.h:71
@ MAX_DELAY
Definition modules_delay.h:71
int age
number of table entries written (value is only important when it is less than MAX_DELAY,...
Definition modules_delay.h:77
dsp::biquad_d2 biquad_right[2]
Definition modules_delay.h:81
vumeters meters
Definition modules_delay.h:98
int deltime_l
Definition modules_delay.h:75
int deltime_r
Definition modules_delay.h:75
int bufptr
Definition modules_delay.h:75
dsp::gain_smoothing fb_left
Definition modules_delay.h:79
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_delay.cpp:280
uint32_t srate
Definition modules_delay.h:83
void deactivate()
LADSPA-esque deactivate function.
Definition modules_delay.cpp:209
long _tap_avg
Definition modules_delay.h:95
int mixmode
Definition modules_delay.h:75
void set_sample_rate(uint32_t sr)
Set sample rate for the plugin.
Definition modules_delay.cpp:213
@ MIXMODE_STEREO
Definition modules_delay.h:72
@ MIXMODE_PINGPONG
Definition modules_delay.h:72
@ MIXMODE_LR
Definition modules_delay.h:72
@ MIXMODE_RL
Definition modules_delay.h:72
Definition plugin_tools.h:32
Definition bypass.h:9
Definition inertia.h:242
Definition onepole.h:35
Definition audio_fx.h:743
Definition audio_fx.h:355
static PuglViewHint int value
Definition pugl.h:1708
unsigned int uint32_t
Definition mid.cpp:100
Definition benchmark.cpp:53
reverse_delay_audio_module reversedelay_audio_module
Definition modules_delay.h:197
comp_delay_audio_module compdelay_audio_module
Definition modules_delay.h:134
General information about the plugin -.
Definition giface.h:315
Definition biquad.h:430
Definition delay.h:41
ZCONST char * key
Definition crypt.c:587