11
#define _ISOC9X_SOURCE 1
12
#define _ISOC99_SOURCE 1
13
#define __USE_ISOC99 1
14
#define __USE_ISOC9X 1
21
#define _WINDOWS_DLL_EXPORT_ __declspec(dllexport)
23
void _init(); // forward declaration
25
#define _WINDOWS_DLL_EXPORT_
29
#define FOVERDRIVE_DRIVE 0
30
#define FOVERDRIVE_INPUT 1
31
#define FOVERDRIVE_OUTPUT 2
33
static LADSPA_Descriptor *foverdriveDescriptor = NULL;
39
LADSPA_Data run_adding_gain;
43
const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) {
53
return foverdriveDescriptor;
59
static void cleanupFoverdrive(LADSPA_Handle instance) {
63
static void connectPortFoverdrive(
64
LADSPA_Handle instance,
69
plugin = (Foverdrive *)instance;
71
case FOVERDRIVE_DRIVE:
74
case FOVERDRIVE_INPUT:
77
case FOVERDRIVE_OUTPUT:
78
plugin->output = data;
83
static LADSPA_Handle instantiateFoverdrive(
84
const LADSPA_Descriptor *descriptor,
85
unsigned long s_rate) {
86
Foverdrive *plugin_data = (Foverdrive *)malloc(sizeof(Foverdrive));
87
plugin_data->run_adding_gain = 1.0f;
89
return (LADSPA_Handle)plugin_data;
96
#define buffer_write(b, v) (b = v)
98
#define RUN_REPLACING 1
100
static void runFoverdrive(LADSPA_Handle instance, unsigned long sample_count) {
101
Foverdrive *plugin_data = (Foverdrive *)instance;
103
/* Drive level (float value) */
104
const LADSPA_Data drive = *(plugin_data->drive);
106
/* Input (array of floats of length sample_count) */
107
const LADSPA_Data * const input = plugin_data->input;
109
/* Output (array of floats of length sample_count) */
110
LADSPA_Data * const output = plugin_data->output;
112
#line 16 "foverdrive_1196.xml"
114
const float drivem1 = drive - 1.0f;
116
for (pos = 0; pos < sample_count; pos++) {
117
LADSPA_Data x = input[pos];
118
const float fx = fabs(x);
119
buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f));
126
#define buffer_write(b, v) (b += (v) * run_adding_gain)
128
#define RUN_REPLACING 0
130
static void setRunAddingGainFoverdrive(LADSPA_Handle instance, LADSPA_Data gain) {
131
((Foverdrive *)instance)->run_adding_gain = gain;
134
static void runAddingFoverdrive(LADSPA_Handle instance, unsigned long sample_count) {
135
Foverdrive *plugin_data = (Foverdrive *)instance;
136
LADSPA_Data run_adding_gain = plugin_data->run_adding_gain;
138
/* Drive level (float value) */
139
const LADSPA_Data drive = *(plugin_data->drive);
141
/* Input (array of floats of length sample_count) */
142
const LADSPA_Data * const input = plugin_data->input;
144
/* Output (array of floats of length sample_count) */
145
LADSPA_Data * const output = plugin_data->output;
147
#line 16 "foverdrive_1196.xml"
149
const float drivem1 = drive - 1.0f;
151
for (pos = 0; pos < sample_count; pos++) {
152
LADSPA_Data x = input[pos];
153
const float fx = fabs(x);
154
buffer_write(output[pos], x*(fx + drive)/(x*x + drivem1*fx + 1.0f));
160
LADSPA_PortDescriptor *port_descriptors;
161
LADSPA_PortRangeHint *port_range_hints;
164
#define D_(s) dgettext(PACKAGE, s)
165
setlocale(LC_ALL, "");
166
bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR);
172
foverdriveDescriptor =
173
(LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor));
175
if (foverdriveDescriptor) {
176
foverdriveDescriptor->UniqueID = 1196;
177
foverdriveDescriptor->Label = "foverdrive";
178
foverdriveDescriptor->Properties =
179
LADSPA_PROPERTY_HARD_RT_CAPABLE;
180
foverdriveDescriptor->Name =
181
D_("Fast overdrive");
182
foverdriveDescriptor->Maker =
183
"Steve Harris <steve@plugin.org.uk>";
184
foverdriveDescriptor->Copyright =
186
foverdriveDescriptor->PortCount = 3;
188
port_descriptors = (LADSPA_PortDescriptor *)calloc(3,
189
sizeof(LADSPA_PortDescriptor));
190
foverdriveDescriptor->PortDescriptors =
191
(const LADSPA_PortDescriptor *)port_descriptors;
193
port_range_hints = (LADSPA_PortRangeHint *)calloc(3,
194
sizeof(LADSPA_PortRangeHint));
195
foverdriveDescriptor->PortRangeHints =
196
(const LADSPA_PortRangeHint *)port_range_hints;
198
port_names = (char **)calloc(3, sizeof(char*));
199
foverdriveDescriptor->PortNames =
200
(const char **)port_names;
202
/* Parameters for Drive level */
203
port_descriptors[FOVERDRIVE_DRIVE] =
204
LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL;
205
port_names[FOVERDRIVE_DRIVE] =
207
port_range_hints[FOVERDRIVE_DRIVE].HintDescriptor =
208
LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MINIMUM;
209
port_range_hints[FOVERDRIVE_DRIVE].LowerBound = 1;
210
port_range_hints[FOVERDRIVE_DRIVE].UpperBound = 3;
212
/* Parameters for Input */
213
port_descriptors[FOVERDRIVE_INPUT] =
214
LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO;
215
port_names[FOVERDRIVE_INPUT] =
217
port_range_hints[FOVERDRIVE_INPUT].HintDescriptor = 0;
219
/* Parameters for Output */
220
port_descriptors[FOVERDRIVE_OUTPUT] =
221
LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO;
222
port_names[FOVERDRIVE_OUTPUT] =
224
port_range_hints[FOVERDRIVE_OUTPUT].HintDescriptor = 0;
226
foverdriveDescriptor->activate = NULL;
227
foverdriveDescriptor->cleanup = cleanupFoverdrive;
228
foverdriveDescriptor->connect_port = connectPortFoverdrive;
229
foverdriveDescriptor->deactivate = NULL;
230
foverdriveDescriptor->instantiate = instantiateFoverdrive;
231
foverdriveDescriptor->run = runFoverdrive;
232
foverdriveDescriptor->run_adding = runAddingFoverdrive;
233
foverdriveDescriptor->set_run_adding_gain = setRunAddingGainFoverdrive;
238
if (foverdriveDescriptor) {
239
free((LADSPA_PortDescriptor *)foverdriveDescriptor->PortDescriptors);
240
free((char **)foverdriveDescriptor->PortNames);
241
free((LADSPA_PortRangeHint *)foverdriveDescriptor->PortRangeHints);
242
free(foverdriveDescriptor);