1 // generated from file './/shakatube.dsp' by dsp2cc:
2 // Code generated with Faust 0.9.90 (http://faust.grame.fr)
3 
4 #include "shakatubep2_table.h"
5 
6 namespace shakatube {
7 
8 class Dsp: public PluginLV2 {
9 private:
10 	uint32_t fSamplingFreq;
11 	double 	fConst0;
12 	double 	fConst1;
13 	double 	fConst2;
14 	double 	fConst3;
15 	double 	fConst4;
16 	double 	fConst5;
17 	double 	fConst6;
18 	double 	fConst7;
19 	FAUSTFLOAT 	fslider0;
20 	FAUSTFLOAT	*fslider0_;
21 	double 	fRec1[2];
22 	double 	fConst8;
23 	double 	fConst9;
24 	double 	fConst10;
25 	double 	fConst11;
26 	double 	fConst12;
27 	double 	fConst13;
28 	double 	fConst14;
29 	double 	fConst15;
30 	double 	fConst16;
31 	double 	fConst17;
32 	double 	fConst18;
33 	double 	fConst19;
34 	double 	fConst20;
35 	double 	fConst21;
36 	FAUSTFLOAT 	fslider1;
37 	FAUSTFLOAT	*fslider1_;
38 	double 	fRec3[2];
39 	double 	fConst22;
40 	double 	fConst23;
41 	double 	fConst24;
42 	double 	fConst25;
43 	double 	fConst26;
44 	double 	fConst27;
45 	double 	fConst28;
46 	double 	fConst29;
47 	double 	fConst30;
48 	double 	fConst31;
49 	double 	fConst32;
50 	double 	fConst33;
51 	double 	fRec4[4];
52 	double 	fConst34;
53 	double 	fConst35;
54 	double 	fConst36;
55 	double 	fConst37;
56 	double 	fRec2[6];
57 	double 	fConst38;
58 	double 	fConst39;
59 	double 	fConst40;
60 	double 	fConst41;
61 	double 	fConst42;
62 	double 	fConst43;
63 	double 	fConst44;
64 	double 	fConst45;
65 	double 	fConst46;
66 	double 	fConst47;
67 	double 	fConst48;
68 	double 	fConst49;
69 	double 	fConst50;
70 	double 	fConst51;
71 	double 	fConst52;
72 	double 	fRec0[4];
73 	FAUSTFLOAT 	fslider2;
74 	FAUSTFLOAT	*fslider2_;
75 	double 	fRec5[2];
76 	double 	fConst53;
77 
78 	void connect(uint32_t port,void* data);
79 	void clear_state_f();
80 	void init(uint32_t samplingFreq);
81 	void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0);
82 
83 	static void clear_state_f_static(PluginLV2*);
84 	static void init_static(uint32_t samplingFreq, PluginLV2*);
85 	static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2*);
86 	static void del_instance(PluginLV2 *p);
87 	static void connect_static(uint32_t port,void* data, PluginLV2 *p);
88 public:
89 	Dsp();
90 	~Dsp();
91 };
92 
93 
94 
Dsp()95 Dsp::Dsp()
96 	: PluginLV2() {
97 	version = PLUGINLV2_VERSION;
98 	id = "shakatube";
99 	name = N_("shakatube");
100 	mono_audio = compute_static;
101 	stereo_audio = 0;
102 	set_samplerate = init_static;
103 	activate_plugin = 0;
104 	connect_ports = connect_static;
105 	clear_state = clear_state_f_static;
106 	delete_instance = del_instance;
107 }
108 
~Dsp()109 Dsp::~Dsp() {
110 }
111 
clear_state_f()112 inline void Dsp::clear_state_f()
113 {
114 	for (int i=0; i<2; i++) fRec1[i] = 0;
115 	for (int i=0; i<2; i++) fRec3[i] = 0;
116 	for (int i=0; i<4; i++) fRec4[i] = 0;
117 	for (int i=0; i<6; i++) fRec2[i] = 0;
118 	for (int i=0; i<4; i++) fRec0[i] = 0;
119 	for (int i=0; i<2; i++) fRec5[i] = 0;
120 }
121 
clear_state_f_static(PluginLV2 * p)122 void Dsp::clear_state_f_static(PluginLV2 *p)
123 {
124 	static_cast<Dsp*>(p)->clear_state_f();
125 }
126 
init(uint32_t samplingFreq)127 inline void Dsp::init(uint32_t samplingFreq)
128 {
129 	fSamplingFreq = samplingFreq;
130 	fConst0 = double(min(1.92e+05, max(1.0, (double)fSamplingFreq)));
131 	fConst1 = (1.6104757871802e-15 * fConst0);
132 	fConst2 = (0.0106830192165377 + (fConst0 * ((fConst0 * (1.05302387697862e-10 - fConst1)) - 1.18457196098283e-05)));
133 	fConst3 = (4.83142736154061e-15 * fConst0);
134 	fConst4 = (0.0320490576496132 + (fConst0 * ((fConst0 * (fConst3 - 1.05302387697862e-10)) - 1.18457196098283e-05)));
135 	fConst5 = (0.0320490576496132 + (fConst0 * (1.18457196098283e-05 + (fConst0 * (0 - (1.05302387697862e-10 + fConst3))))));
136 	fConst6 = (0.0106830192165377 + (fConst0 * (1.18457196098283e-05 + (fConst0 * (1.05302387697862e-10 + fConst1)))));
137 	fConst7 = (1.0 / fConst6);
138 	fConst8 = (1.24736926967588e-23 * fConst0);
139 	fConst9 = ((fConst0 * (5.57818581186461e-22 - fConst8)) - 6.23635632769932e-21);
140 	fConst10 = (1.32698858476157e-20 * fConst0);
141 	fConst11 = (fConst10 - 5.93424022538789e-19);
142 	fConst12 = (3.77628398361412e-24 * fConst0);
143 	fConst13 = (1.05190110384002e-13 + (fConst0 * ((fConst0 * (3.08185104111474e-16 + (fConst0 * ((fConst0 * (7.06455362322565e-21 - fConst12)) - 2.582073179128e-18)))) - 1.03807230695891e-14)));
144 	fConst14 = (1.88814199180706e-23 * fConst0);
145 	fConst15 = (5.2595055192001e-13 + (fConst0 * ((fConst0 * (3.08185104111474e-16 + (fConst0 * (2.582073179128e-18 + (fConst0 * (fConst14 - 2.11936608696769e-20)))))) - 3.11421692087674e-14)));
146 	fConst16 = (3.77628398361412e-23 * fConst0);
147 	fConst17 = (1.05190110384002e-12 + (fConst0 * ((fConst0 * ((fConst0 * (5.164146358256e-18 + (fConst0 * (1.41291072464513e-20 - fConst16)))) - 6.16370208222947e-16)) - 2.07614461391783e-14)));
148 	fConst18 = (1.05190110384002e-12 + (fConst0 * (2.07614461391783e-14 + (fConst0 * ((fConst0 * ((fConst0 * (1.41291072464513e-20 + fConst16)) - 5.164146358256e-18)) - 6.16370208222947e-16)))));
149 	fConst19 = (5.2595055192001e-13 + (fConst0 * (3.11421692087674e-14 + (fConst0 * (3.08185104111474e-16 + (fConst0 * ((fConst0 * (0 - (2.11936608696769e-20 + fConst14))) - 2.582073179128e-18)))))));
150 	fConst20 = (1.05190110384002e-13 + (fConst0 * (1.03807230695891e-14 + (fConst0 * (3.08185104111474e-16 + (fConst0 * (2.582073179128e-18 + (fConst0 * (7.06455362322565e-21 + fConst12)))))))));
151 	fConst21 = (1.0 / fConst20);
152 	fConst22 = (9.63245349847197e-15 * fConst0);
153 	fConst23 = (7.67840464353146e-10 + (fConst0 * (1.15097032777674e-11 + fConst22)));
154 	fConst24 = (1.92649069969439e-10 * fConst0);
155 	fConst25 = (2.12680688873712e-07 + fConst24);
156 	fConst26 = (9.63235717490022e-15 * fConst0);
157 	fConst27 = (8.75768341903893e-08 - fConst26);
158 	fConst28 = ((fConst0 * (1.15097032777674e-11 - fConst22)) - 7.67840464353146e-10);
159 	fConst29 = (fConst24 - 2.12680688873712e-07);
160 	fConst30 = (2.88973604954159e-14 * fConst0);
161 	fConst31 = (7.67840464353146e-10 + (fConst0 * (0 - (1.15097032777674e-11 + fConst30))));
162 	fConst32 = (2.12680688873712e-07 - fConst24);
163 	fConst33 = ((fConst0 * (fConst30 - 1.15097032777674e-11)) - 7.67840464353146e-10);
164 	fConst34 = (2.88970715247007e-14 * fConst0);
165 	fConst35 = (fConst34 - 8.75768341903893e-08);
166 	fConst36 = (0 - (8.75768341903893e-08 + fConst34));
167 	fConst37 = (8.75768341903893e-08 + fConst26);
168 	fConst38 = (6.2368463483794e-23 * fConst0);
169 	fConst39 = (6.23635632769932e-21 + (fConst0 * (fConst38 - 1.67345574355938e-21)));
170 	fConst40 = (3.98096575428472e-20 * fConst0);
171 	fConst41 = (5.93424022538789e-19 - fConst40);
172 	fConst42 = (1.24736926967588e-22 * fConst0);
173 	fConst43 = (1.24727126553986e-20 + (fConst0 * (1.11563716237292e-21 - fConst42)));
174 	fConst44 = (2.65397716952315e-20 * fConst0);
175 	fConst45 = (1.18684804507758e-18 + fConst44);
176 	fConst46 = ((fConst0 * (1.11563716237292e-21 + fConst42)) - 1.24727126553986e-20);
177 	fConst47 = (fConst44 - 1.18684804507758e-18);
178 	fConst48 = ((fConst0 * (0 - (1.67345574355938e-21 + fConst38))) - 6.23635632769932e-21);
179 	fConst49 = (0 - (5.93424022538789e-19 + fConst40));
180 	fConst50 = (6.23635632769932e-21 + (fConst0 * (5.57818581186461e-22 + fConst8)));
181 	fConst51 = (5.93424022538789e-19 + fConst10);
182 	fConst52 = (faustpower<2>(fConst0) / fConst20);
183 	fConst53 = (fConst0 / fConst6);
184 	clear_state_f();
185 }
186 
init_static(uint32_t samplingFreq,PluginLV2 * p)187 void Dsp::init_static(uint32_t samplingFreq, PluginLV2 *p)
188 {
189 	static_cast<Dsp*>(p)->init(samplingFreq);
190 }
191 
compute(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0)192 void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0)
193 {
194 #define fslider0 (*fslider0_)
195 #define fslider1 (*fslider1_)
196 #define fslider2 (*fslider2_)
197 	double 	fSlow0 = (0.007000000000000006 * double(fslider0));
198 	double 	fSlow1 = (4.748558434412966e-05 * (exp((5 * double(fslider1))) - 1));
199 	double 	fSlow2 = (0.007000000000000006 * double(fslider2));
200 	for (int i=0; i<count; i++) {
201 		fRec1[0] = (fSlow0 + (0.993 * fRec1[1]));
202 		fRec3[0] = (fSlow1 + (0.993 * fRec3[1]));
203 		double fTemp0 = (1.41147258344646e-05 + (fConst0 * (fConst25 + (fConst23 * fRec3[0]))));
204 		fRec4[0] = ((double)input0[i] - (((fRec4[2] * (4.23441775033937e-05 + (fConst0 * ((fConst33 * fRec3[0]) - fConst25)))) + ((fRec4[1] * (4.23441775033937e-05 + (fConst0 * (fConst32 + (fConst31 * fRec3[0]))))) + (fRec4[3] * (1.41147258344646e-05 + (fConst0 * (fConst29 + (fConst28 * fRec3[0]))))))) / fTemp0));
205 		fRec2[0] = ((fConst0 * (((((fRec4[0] * (1.99015644109509e-07 + (fConst0 * (1.92647143498004e-10 + (fConst37 * fRec3[0]))))) + (fRec4[1] * (1.99015644109509e-07 + (fConst0 * ((fConst36 * fRec3[0]) - 1.92647143498004e-10))))) + (fRec4[2] * ((fConst0 * ((fConst35 * fRec3[0]) - 1.92647143498004e-10)) - 1.99015644109509e-07))) + (fRec4[3] * ((fConst0 * (1.92647143498004e-10 + (fConst27 * fRec3[0]))) - 1.99015644109509e-07))) / fTemp0)) - (fConst21 * (((((fConst19 * fRec2[1]) + (fConst18 * fRec2[2])) + (fConst17 * fRec2[3])) + (fConst15 * fRec2[4])) + (fConst13 * fRec2[5]))));
206 		fRec0[0] = (tubeclip((fConst52 * ((((((fRec2[0] * (6.63442162521205e-18 + (fConst0 * (fConst51 + (fConst50 * fRec1[0]))))) + (fRec2[1] * (6.63442162521205e-18 + (fConst0 * (fConst49 + (fConst48 * fRec1[0])))))) + (fRec2[2] * ((fConst0 * (fConst47 + (fConst46 * fRec1[0]))) - 1.32688432504241e-17))) + (fRec2[3] * ((fConst0 * (fConst45 + (fConst43 * fRec1[0]))) - 1.32688432504241e-17))) + (fRec2[4] * (6.63442162521205e-18 + (fConst0 * (fConst41 + (fConst39 * fRec1[0])))))) + (fRec2[5] * (6.63442162521205e-18 + (fConst0 * (fConst11 + (fConst9 * fRec1[0])))))))) - (fConst7 * (((fConst5 * fRec0[1]) + (fConst4 * fRec0[2])) + (fConst2 * fRec0[3]))));
207 		fRec5[0] = (fSlow2 + (0.993 * fRec5[1]));
208 		output0[i] = (FAUSTFLOAT)(fConst53 * ((1.17512036261553e-05 * (fRec5[0] * (fRec0[1] + fRec0[0]))) + ((0 - (1.17512036261553e-05 * fRec5[0])) * (fRec0[2] + fRec0[3]))));
209 		// post processing
210 		fRec5[1] = fRec5[0];
211 		for (int i=3; i>0; i--) fRec0[i] = fRec0[i-1];
212 		for (int i=5; i>0; i--) fRec2[i] = fRec2[i-1];
213 		for (int i=3; i>0; i--) fRec4[i] = fRec4[i-1];
214 		fRec3[1] = fRec3[0];
215 		fRec1[1] = fRec1[0];
216 	}
217 #undef fslider0
218 #undef fslider1
219 #undef fslider2
220 }
221 
compute_static(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0,PluginLV2 * p)222 void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2 *p)
223 {
224 	static_cast<Dsp*>(p)->compute(count, input0, output0);
225 }
226 
227 
connect(uint32_t port,void * data)228 void Dsp::connect(uint32_t port,void* data)
229 {
230 	switch ((PortIndex)port)
231 	{
232 	case DRIVE:
233 		fslider1_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
234 		break;
235 	case TONE:
236 		fslider0_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
237 		break;
238 	case VOLUME:
239 		fslider2_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
240 		break;
241 	default:
242 		break;
243 	}
244 }
245 
connect_static(uint32_t port,void * data,PluginLV2 * p)246 void Dsp::connect_static(uint32_t port,void* data, PluginLV2 *p)
247 {
248 	static_cast<Dsp*>(p)->connect(port, data);
249 }
250 
251 
plugin()252 PluginLV2 *plugin() {
253 	return new Dsp();
254 }
255 
del_instance(PluginLV2 * p)256 void Dsp::del_instance(PluginLV2 *p)
257 {
258 	delete static_cast<Dsp*>(p);
259 }
260 
261 /*
262 typedef enum
263 {
264    DRIVE,
265    TONE,
266    VOLUME,
267 } PortIndex;
268 */
269 
270 } // end namespace shakatube
271