1 namespace ampsim_fender_twin_reverb_normal {
2
3 #include <generated/stage/fender_twin_reverb_normal/s01_stage1_neg_table.h>
4 #include <generated/stage/fender_twin_reverb_normal/s01_stage1_table.h>
5 #include <generated/stage/fender_twin_reverb_normal/s03_stage2_neg_table.h>
6 #include <generated/stage/fender_twin_reverb_normal/s03_stage2_table.h>
7 #include <generated/stage/fender_twin_reverb_normal/s04_stage3_neg_table.h>
8 #include <generated/stage/fender_twin_reverb_normal/s04_stage3_table.h>
9 /* ------------------------------------------------------------
10 name: "fender_twin_reverb_normal"
11 Code generated with Faust 2.15.11 (https://faust.grame.fr)
12 Compilation options: cpp, -double -ftz 0
13 ------------------------------------------------------------ */
14
15
16
17 /* link with : "" */
18
module_faustpower2_f(double value)19 static double module_faustpower2_f(double value) {
20 return (value * value);
21
22 }
23
24
25 class module : public dsp {
26
27 private:
28
29 FAUSTFLOAT fVslider0;
30 double fRec0[2];
31 int fSamplingFreq;
32 double fConst0;
33 double fConst1;
34 double fConst2;
35 double fConst3;
36 double fConst4;
37 double fConst5;
38 double fConst6;
39 double fConst7;
40 double fConst8;
41 double fConst9;
42 FAUSTFLOAT fVslider1;
43 double fRec2[2];
44 double fConst10;
45 double fConst11;
46 double fConst12;
47 double fConst13;
48 double fConst14;
49 double fConst15;
50 double fConst16;
51 double fConst17;
52 FAUSTFLOAT fVslider2;
53 double fRec6[2];
54 double fConst18;
55 double fRec5[2];
56 double fConst19;
57 double fConst20;
58 double fConst21;
59 double fConst22;
60 double fConst23;
61 FAUSTFLOAT fVslider3;
62 double fRec7[2];
63 FAUSTFLOAT fVslider4;
64 double fRec8[2];
65 double fConst24;
66 double fConst25;
67 double fConst26;
68 double fConst27;
69 double fConst28;
70 double fConst29;
71 double fConst30;
72 double fConst31;
73 double fConst32;
74 double fConst33;
75 double fConst34;
76 double fConst35;
77 double fConst36;
78 double fConst37;
79 double fConst38;
80 double fConst39;
81 double fConst40;
82 double fConst41;
83 double fRec4[4];
84 double fConst42;
85 double fConst43;
86 FAUSTFLOAT fVslider5;
87 double fRec9[2];
88 double fConst44;
89 double fConst45;
90 double fConst46;
91 double fConst47;
92 double fConst48;
93 double fConst49;
94 double fConst50;
95 double fConst51;
96 double fConst52;
97 double fConst53;
98 double fRec3[2];
99 double fConst54;
100 double fConst55;
101 double fConst56;
102 double fConst57;
103 double fConst58;
104 double fConst59;
105 double fConst60;
106 double fRec1[5];
107 double fConst61;
108 double fConst62;
109 double fConst63;
110 double fConst64;
111 double fConst65;
112
113 public:
114
metadata(Meta * m)115 void metadata(Meta* m) {
116 m->declare("basics.lib/name", "Faust Basic Element Library");
117 m->declare("basics.lib/version", "0.1");
118 m->declare("filename", "fender_twin_reverb_normal");
119 m->declare("filters.lib/fir:author", "Julius O. Smith III");
120 m->declare("filters.lib/fir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>");
121 m->declare("filters.lib/fir:license", "MIT-style STK-4.3 license");
122 m->declare("filters.lib/iir:author", "Julius O. Smith III");
123 m->declare("filters.lib/iir:copyright", "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>");
124 m->declare("filters.lib/iir:license", "MIT-style STK-4.3 license");
125 m->declare("filters.lib/lowpass0_highpass1", "Copyright (C) 2003-2019 by Julius O. Smith III <jos@ccrma.stanford.edu>");
126 m->declare("filters.lib/name", "Faust Filters Library");
127 m->declare("id", "fender_twin_reverb_normal");
128 m->declare("maths.lib/author", "GRAME");
129 m->declare("maths.lib/copyright", "GRAME");
130 m->declare("maths.lib/license", "LGPL with exception");
131 m->declare("maths.lib/name", "Faust Math Library");
132 m->declare("maths.lib/version", "2.1");
133 m->declare("name", "fender_twin_reverb_normal");
134 m->declare("samplerate", "96000");
135 m->declare("signals.lib/name", "Faust Signal Routing Library");
136 m->declare("signals.lib/version", "0.0");
137 }
138
getNumInputs()139 virtual int getNumInputs() {
140 return 1;
141
142 }
getNumOutputs()143 virtual int getNumOutputs() {
144 return 1;
145
146 }
getInputRate(int channel)147 virtual int getInputRate(int channel) {
148 int rate;
149 switch (channel) {
150 case 0: {
151 rate = 1;
152 break;
153 }
154 default: {
155 rate = -1;
156 break;
157 }
158
159 }
160 return rate;
161
162 }
getOutputRate(int channel)163 virtual int getOutputRate(int channel) {
164 int rate;
165 switch (channel) {
166 case 0: {
167 rate = 1;
168 break;
169 }
170 default: {
171 rate = -1;
172 break;
173 }
174
175 }
176 return rate;
177
178 }
179
classInit(int samplingFreq)180 static void classInit(int samplingFreq) {
181
182 }
183
instanceConstants(int samplingFreq)184 virtual void instanceConstants(int samplingFreq) {
185 fSamplingFreq = samplingFreq;
186 fConst0 = std::min<double>(192000.0, std::max<double>(1.0, double(fSamplingFreq)));
187 fConst1 = module_faustpower2_f(fConst0);
188 fConst2 = (1.8725645936446101e-19 * fConst0);
189 fConst3 = (((((((fConst2 + 5.3899375323317501e-17) * fConst0) + 1.72508035993432e-15) * fConst0) + 1.4696419924380201e-14) * fConst0) + 1.08177249568012e-14);
190 fConst4 = (fConst1 / fConst3);
191 fConst5 = (3.7424711166569204e-18 * fConst0);
192 fConst6 = (((-5.17684011327779e-17 - fConst5) * fConst0) + -3.4215978904890997e-17);
193 fConst7 = (2.0817038124150999e-05 * fConst0);
194 fConst8 = (fConst7 + 0.00078217004075415201);
195 fConst9 = (1.0 / fConst8);
196 fConst10 = (0.0013587480871194301 * fConst0);
197 fConst11 = (-0.033140197246815203 - fConst10);
198 fConst12 = (0.12 * fConst0);
199 fConst13 = (2.0822119751855701e-05 * fConst0);
200 fConst14 = (fConst13 + 0.00053825191092610701);
201 fConst15 = (1.0 / fConst14);
202 fConst16 = (0.0012901442014419701 * fConst0);
203 fConst17 = (-0.017201922685893 - fConst16);
204 fConst18 = ((0.00053825191092610701 - fConst13) / fConst14);
205 fConst19 = (fConst16 + -0.017201922685893);
206 fConst20 = (9.0343455639941396e-13 * fConst0);
207 fConst21 = (7.25820551773951e-09 - fConst20);
208 fConst22 = (4.3327983827318802e-14 * fConst0);
209 fConst23 = (((-1.17981178089793e-10 - fConst22) * fConst0) + 1.23223556842233e-08);
210 fConst24 = (1.2648083789591799e-13 * fConst0);
211 fConst25 = (7.2397680778129901e-10 - fConst24);
212 fConst26 = (6.0659177358246399e-15 * fConst0);
213 fConst27 = ((-1.1583014343169901e-11 - fConst26) * fConst0);
214 fConst28 = (-7.25820551773951e-09 - fConst20);
215 fConst29 = (((fConst22 + -1.17981178089793e-10) * fConst0) + -1.23223556842233e-08);
216 fConst30 = (-7.2397680778129901e-10 - fConst24);
217 fConst31 = ((fConst26 + -1.1583014343169901e-11) * fConst0);
218 fConst32 = (fConst20 + -7.25820551773951e-09);
219 fConst33 = (1.4442661275772902e-14 * fConst0);
220 fConst34 = (((1.17981178089793e-10 - fConst33) * fConst0) + -1.23223556842233e-08);
221 fConst35 = (fConst24 + -7.2397680778129901e-10);
222 fConst36 = (2.0219725786082099e-15 * fConst0);
223 fConst37 = ((1.1583014343169901e-11 - fConst36) * fConst0);
224 fConst38 = (fConst20 + 7.25820551773951e-09);
225 fConst39 = (((fConst33 + 1.17981178089793e-10) * fConst0) + 1.23223556842233e-08);
226 fConst40 = (fConst24 + 7.2397680778129901e-10);
227 fConst41 = ((fConst36 + 1.1583014343169901e-11) * fConst0);
228 fConst42 = (2.4398878836092999e-12 * fConst0);
229 fConst43 = (fConst42 + 1.23223556842233e-08);
230 fConst44 = (fConst20 + 3.0729066544197702e-11);
231 fConst45 = (1.4442661275772902e-14 * fConst1);
232 fConst46 = (1.23223556842233e-08 - fConst42);
233 fConst47 = (3.0729066544197702e-11 - fConst20);
234 fConst48 = (-1.23223556842233e-08 - fConst42);
235 fConst49 = (-3.0729066544197702e-11 - fConst20);
236 fConst50 = (4.3327983827318802e-14 * fConst1);
237 fConst51 = (fConst42 + -1.23223556842233e-08);
238 fConst52 = (fConst20 + -3.0729066544197702e-11);
239 fConst53 = ((0.00078217004075415201 - fConst7) / fConst8);
240 fConst54 = (fConst10 + -0.033140197246815203);
241 fConst55 = (1.0 / fConst3);
242 fConst56 = (7.49025837457845e-19 * fConst0);
243 fConst57 = (((((-1.07798750646635e-16 - fConst56) * fConst1) + 2.9392839848760497e-14) * fConst0) + 4.3270899827204598e-14);
244 fConst58 = ((((1.1235387561867701e-18 * fConst1) + -3.45016071986864e-15) * fConst1) + 6.4906349740807e-14);
245 fConst59 = (((((1.07798750646635e-16 - fConst56) * fConst1) + -2.9392839848760497e-14) * fConst0) + 4.3270899827204598e-14);
246 fConst60 = (((((((fConst2 + -5.3899375323317501e-17) * fConst0) + 1.72508035993432e-15) * fConst0) + -1.4696419924380201e-14) * fConst0) + 1.08177249568012e-14);
247 fConst61 = (1.49698844666277e-17 * fConst0);
248 fConst62 = ((fConst61 + 1.03536802265556e-16) * fConst0);
249 fConst63 = (6.8431957809781994e-17 - (2.2454826699941501e-17 * fConst1));
250 fConst64 = ((fConst61 + -1.03536802265556e-16) * fConst0);
251 fConst65 = (((5.17684011327779e-17 - fConst5) * fConst0) + -3.4215978904890997e-17);
252
253 }
254
instanceResetUserInterface()255 virtual void instanceResetUserInterface() {
256 fVslider0 = FAUSTFLOAT(1.0);
257 fVslider1 = FAUSTFLOAT(0.5);
258 fVslider2 = FAUSTFLOAT(1.0);
259 fVslider3 = FAUSTFLOAT(0.5);
260 fVslider4 = FAUSTFLOAT(0.5);
261 fVslider5 = FAUSTFLOAT(0.5);
262
263 }
264
instanceClear()265 virtual void instanceClear() {
266 for (int l0 = 0; (l0 < 2); l0 = (l0 + 1)) {
267 fRec0[l0] = 0.0;
268
269 }
270 for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) {
271 fRec2[l1] = 0.0;
272
273 }
274 for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) {
275 fRec6[l2] = 0.0;
276
277 }
278 for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) {
279 fRec5[l3] = 0.0;
280
281 }
282 for (int l4 = 0; (l4 < 2); l4 = (l4 + 1)) {
283 fRec7[l4] = 0.0;
284
285 }
286 for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) {
287 fRec8[l5] = 0.0;
288
289 }
290 for (int l6 = 0; (l6 < 4); l6 = (l6 + 1)) {
291 fRec4[l6] = 0.0;
292
293 }
294 for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) {
295 fRec9[l7] = 0.0;
296
297 }
298 for (int l8 = 0; (l8 < 2); l8 = (l8 + 1)) {
299 fRec3[l8] = 0.0;
300
301 }
302 for (int l9 = 0; (l9 < 5); l9 = (l9 + 1)) {
303 fRec1[l9] = 0.0;
304
305 }
306
307 }
308
init(int samplingFreq)309 virtual void init(int samplingFreq) {
310 classInit(samplingFreq);
311 instanceInit(samplingFreq);
312 }
313
instanceInit(int samplingFreq)314 virtual void instanceInit(int samplingFreq) {
315 instanceConstants(samplingFreq);
316 instanceResetUserInterface();
317 instanceClear();
318 }
319
clone()320 virtual module* clone() {
321 return new module();
322 }
323
getSampleRate()324 virtual int getSampleRate() {
325 return fSamplingFreq;
326
327 }
328
buildUserInterface(UI * ui_interface)329 virtual void buildUserInterface(UI* ui_interface) {
330 ui_interface->openVerticalBox("fender_twin_reverb_normal");
331 ui_interface->addVerticalSlider(".amp.bass", &fVslider3, 0.5, 0.0, 1.0, 0.01);
332 ui_interface->addVerticalSlider(".amp.gain", &fVslider1, 0.5, 0.0, 1.0, 0.01);
333 ui_interface->addVerticalSlider(".amp.middle", &fVslider4, 0.5, 0.0, 1.0, 0.01);
334 ui_interface->addVerticalSlider(".amp.postgain", &fVslider0, 1.0, 0.00398, 251.18861000000001, 0.0001);
335 ui_interface->addVerticalSlider(".amp.pregain", &fVslider2, 1.0, 0.00398, 251.18861000000001, 0.0001);
336 ui_interface->addVerticalSlider(".amp.treble", &fVslider5, 0.5, 0.0, 1.0, 0.01);
337 ui_interface->closeBox();
338
339 }
340
compute(int count,FAUSTFLOAT ** inputs,FAUSTFLOAT ** outputs)341 virtual void compute(int count, FAUSTFLOAT** inputs, FAUSTFLOAT** outputs) {
342 FAUSTFLOAT* input0 = inputs[0];
343 FAUSTFLOAT* output0 = outputs[0];
344 double fSlow0 = (0.0010000000000000009 * double(fVslider0));
345 double fSlow1 = (5.2395696491255995e-05 * (std::exp((3.0 * double(fVslider1))) + -1.0));
346 double fSlow2 = (0.0010000000000000009 * double(fVslider2));
347 double fSlow3 = (5.2395696491255995e-05 * (std::exp((3.0 * double(fVslider3))) + -1.0));
348 double fSlow4 = (5.2395696491255995e-05 * (std::exp((3.0 * double(fVslider4))) + -1.0));
349 double fSlow5 = (5.2395696491255995e-05 * (std::exp((3.0 * double(fVslider5))) + -1.0));
350 for (int i = 0; (i < count); i = (i + 1)) {
351 fRec0[0] = (fSlow0 + (0.999 * fRec0[1]));
352 fRec2[0] = (fSlow1 + (0.999 * fRec2[1]));
353 fRec6[0] = (fSlow2 + (0.999 * fRec6[1]));
354 fRec5[0] = ((0.059999999999999998 * (fRec6[0] * double(input0[i]))) - (fConst18 * fRec5[1]));
355 double fTemp0 = (fConst15 * ((fConst17 * fRec5[0]) + (fConst19 * fRec5[1])));
356 fRec7[0] = (fSlow3 + (0.999 * fRec7[1]));
357 fRec8[0] = (fSlow4 + (0.999 * fRec8[1]));
358 double fTemp1 = (fRec8[0] * (fConst25 + (fConst27 * fRec7[0])));
359 double fTemp2 = (fRec8[0] * (fConst30 + (fConst31 * fRec7[0])));
360 double fTemp3 = (fRec8[0] * (fConst35 + (fConst37 * fRec7[0])));
361 double fTemp4 = (fRec8[0] * (fConst40 + (fConst41 * fRec7[0])));
362 double fTemp5 = ((fConst0 * ((fConst38 + (fConst39 * fRec7[0])) + fTemp4)) + 2.4583253235358199e-07);
363 fRec4[0] = ((int(signbit(double(fTemp0)))?double(s01_stage1_negclip(double(fTemp0))):double(s01_stage1clip(double(fTemp0)))) - ((((fRec4[1] * ((fConst0 * ((fConst21 + (fConst23 * fRec7[0])) + fTemp1)) + 7.3749759706074602e-07)) + (fRec4[2] * ((fConst0 * ((fConst28 + (fConst29 * fRec7[0])) + fTemp2)) + 7.3749759706074602e-07))) + (fRec4[3] * ((fConst0 * ((fConst32 + (fConst34 * fRec7[0])) + fTemp3)) + 2.4583253235358199e-07))) / fTemp5));
364 fRec9[0] = (fSlow5 + (0.999 * fRec9[1]));
365 fRec3[0] = ((fConst12 * (((((fRec4[0] * ((fTemp4 + (fConst43 * fRec7[0])) + (fRec9[0] * (fConst44 + (fConst45 * fRec7[0]))))) + (fRec4[1] * ((fTemp1 + (fConst46 * fRec7[0])) + (fRec9[0] * (fConst47 + (fConst1 * (0.0 - (4.3327983827318802e-14 * fRec7[0])))))))) + (fRec4[2] * ((fTemp2 + (fConst48 * fRec7[0])) + (fRec9[0] * (fConst49 + (fConst50 * fRec7[0])))))) + (fRec4[3] * ((fTemp3 + (fConst51 * fRec7[0])) + (fRec9[0] * (fConst52 + (fConst1 * (0.0 - (1.4442661275772902e-14 * fRec7[0])))))))) / fTemp5)) - (fConst53 * fRec3[1]));
366 double fTemp6 = (fConst9 * (fRec2[0] * ((fConst11 * fRec3[0]) + (fConst54 * fRec3[1]))));
367 fRec1[0] = ((0.02 * (int(signbit(double(fTemp6)))?double(s03_stage2_negclip(double(fTemp6))):double(s03_stage2clip(double(fTemp6))))) - (fConst55 * ((((fConst57 * fRec1[1]) + (fConst58 * fRec1[2])) + (fConst59 * fRec1[3])) + (fConst60 * fRec1[4]))));
368 double fTemp7 = (fConst4 * (((((fConst6 * fRec1[0]) + (fConst62 * fRec1[1])) + (fConst63 * fRec1[2])) + (fConst64 * fRec1[3])) + (fConst65 * fRec1[4])));
369 output0[i] = FAUSTFLOAT((fRec0[0] * (int(signbit(double(fTemp7)))?double(s04_stage3_negclip(double(fTemp7))):double(s04_stage3clip(double(fTemp7))))));
370 fRec0[1] = fRec0[0];
371 fRec2[1] = fRec2[0];
372 fRec6[1] = fRec6[0];
373 fRec5[1] = fRec5[0];
374 fRec7[1] = fRec7[0];
375 fRec8[1] = fRec8[0];
376 for (int j0 = 3; (j0 > 0); j0 = (j0 - 1)) {
377 fRec4[j0] = fRec4[(j0 - 1)];
378
379 }
380 fRec9[1] = fRec9[0];
381 fRec3[1] = fRec3[0];
382 for (int j1 = 4; (j1 > 0); j1 = (j1 - 1)) {
383 fRec1[j1] = fRec1[(j1 - 1)];
384
385 }
386
387 }
388
389 }
390
391 };
392
393
instantiate()394 dsp *instantiate()
395 {
396 return new module();
397 }
398 } /* namespace ampsim_fender_twin_reverb_normal */
399
400