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