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