1 // generated from file '../src/LV2/faust/bmp.dsp' by dsp2cc:
2 // Code generated with Faust (https://faust.grame.fr)
3
4 #include "clipping.h"
5
6 namespace bmp {
7
8 class Dsp: public PluginLV2 {
9 private:
10 gx_resample::FixedRateResampler smp;
11 uint32_t sample_rate;
12 uint32_t fSampleRate;
13 double fConst0;
14 double fConst5;
15 double fConst6;
16 double fConst7;
17 double fConst10;
18 double fConst12;
19 double fConst14;
20 double fConst16;
21 double fConst18;
22 double fConst19;
23 double fConst20;
24 double fConst21;
25 double fRec5[3];
26 FAUSTFLOAT fVslider0;
27 FAUSTFLOAT *fVslider0_;
28 double fRec6[2];
29 double fConst23;
30 double fConst25;
31 double fConst27;
32 double fConst28;
33 double fConst29;
34 double fConst30;
35 double fRec4[3];
36 double fConst32;
37 double fConst34;
38 double fConst35;
39 double fConst36;
40 double fConst37;
41 double fConst38;
42 double fRec3[3];
43 double fConst39;
44 double fConst40;
45 double fConst42;
46 double fConst43;
47 double fRec2[3];
48 double fConst44;
49 double fConst45;
50 FAUSTFLOAT fVslider1;
51 FAUSTFLOAT *fVslider1_;
52 double fRec7[2];
53 double fConst46;
54 double fConst47;
55 double fConst48;
56 double fConst49;
57 double fRec1[3];
58 FAUSTFLOAT fVslider2;
59 FAUSTFLOAT *fVslider2_;
60 double fRec8[2];
61 double fConst50;
62 double fRec0[3];
63 double fConst52;
64 double fConst53;
65
66 void connect(uint32_t port,void* data);
67 void clear_state_f();
68 void init(uint32_t sample_rate);
69 void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0);
70
71 static void clear_state_f_static(PluginLV2*);
72 static void init_static(uint32_t sample_rate, PluginLV2*);
73 static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2*);
74 static void del_instance(PluginLV2 *p);
75 static void connect_static(uint32_t port,void* data, PluginLV2 *p);
76 public:
77 Dsp();
78 ~Dsp();
79 };
80
81
82
Dsp()83 Dsp::Dsp()
84 : PluginLV2() {
85 version = PLUGINLV2_VERSION;
86 id = "bmp";
87 name = N_("BigMuffPi");
88 mono_audio = compute_static;
89 stereo_audio = 0;
90 set_samplerate = init_static;
91 activate_plugin = 0;
92 connect_ports = connect_static;
93 clear_state = clear_state_f_static;
94 delete_instance = del_instance;
95 }
96
~Dsp()97 Dsp::~Dsp() {
98 }
99
clear_state_f()100 inline void Dsp::clear_state_f()
101 {
102 for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) fRec5[l0] = 0.0;
103 for (int l1 = 0; (l1 < 2); l1 = (l1 + 1)) fRec6[l1] = 0.0;
104 for (int l2 = 0; (l2 < 3); l2 = (l2 + 1)) fRec4[l2] = 0.0;
105 for (int l3 = 0; (l3 < 3); l3 = (l3 + 1)) fRec3[l3] = 0.0;
106 for (int l4 = 0; (l4 < 3); l4 = (l4 + 1)) fRec2[l4] = 0.0;
107 for (int l5 = 0; (l5 < 2); l5 = (l5 + 1)) fRec7[l5] = 0.0;
108 for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) fRec1[l6] = 0.0;
109 for (int l7 = 0; (l7 < 2); l7 = (l7 + 1)) fRec8[l7] = 0.0;
110 for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) fRec0[l8] = 0.0;
111 }
112
clear_state_f_static(PluginLV2 * p)113 void Dsp::clear_state_f_static(PluginLV2 *p)
114 {
115 static_cast<Dsp*>(p)->clear_state_f();
116 }
117
init(uint32_t RsamplingFreq)118 inline void Dsp::init(uint32_t RsamplingFreq)
119 {
120 sample_rate = 96000;
121 smp.setup(RsamplingFreq, sample_rate);
122 fSampleRate = sample_rate;
123 fConst0 = std::min<double>(192000.0, std::max<double>(1.0, double(fSampleRate)));
124 double fConst1 = std::tan((37699.111843077517 / fConst0));
125 double fConst2 = (1.0 / fConst1);
126 double fConst3 = (fConst0 * std::sin((75398.223686155034 / fConst0)));
127 double fConst4 = (11800.82018976876 / fConst3);
128 fConst5 = (1.0 / (((fConst2 + fConst4) / fConst1) + 1.0));
129 fConst6 = (2.0 * (1.0 - (1.0 / mydsp_faustpower2_f(fConst1))));
130 fConst7 = mydsp_faustpower2_f(fConst0);
131 double fConst8 = (4.3388468105506801e-10 * fConst0);
132 double fConst9 = ((fConst0 * (fConst8 + 6.8680901344593704e-09)) + 2.6522670215943701e-08);
133 fConst10 = (fConst7 / fConst9);
134 double fConst11 = (3.6868885846545499e-10 * fConst0);
135 fConst12 = (1.0 / ((fConst0 * (fConst11 + 3.0348555108869402e-06)) + 0.00486780557301784));
136 double fConst13 = (3.9204879585950002e-10 * fConst0);
137 fConst14 = (1.0 / ((fConst0 * (fConst13 + 2.0047872746271098e-06)) + 0.00048978515761155495));
138 double fConst15 = (7.6673121439986096e-12 * fConst0);
139 fConst16 = (fConst0 * (fConst15 + -3.9949085717896201e-05));
140 double fConst17 = (2.0828770493449602e-05 * fConst0);
141 fConst18 = (1.0 / (fConst17 + 0.00021901631427173599));
142 fConst19 = (3.7454979802541999e-06 * fConst0);
143 fConst20 = (0.0 - fConst19);
144 fConst21 = (0.00021901631427173599 - fConst17);
145 double fConst22 = (1.2821120020392999e-10 * fConst0);
146 fConst23 = (fConst22 + -6.2652181541007596e-07);
147 double fConst24 = (1.12312054615984e-09 * fConst0);
148 fConst25 = (fConst24 + -2.8621970465474001e-06);
149 double fConst26 = (1.1344651981412601e-09 * fConst0);
150 fConst27 = (2.8911081278256599e-06 - fConst26);
151 fConst28 = (fConst22 + 6.2652181541007596e-07);
152 fConst29 = (fConst24 + 2.8621970465474001e-06);
153 fConst30 = (-2.8911081278256599e-06 - fConst26);
154 double fConst31 = (2.26293387153501e-14 * fConst0);
155 fConst32 = (fConst31 + -1.17905906929765e-07);
156 double fConst33 = (2.26293387153501e-12 * fConst0);
157 fConst34 = (fConst33 + -1.17905906929765e-05);
158 fConst35 = (fConst31 + 1.17905906929765e-07);
159 fConst36 = (fConst33 + 1.17905906929765e-05);
160 fConst37 = (0.00097957031522311099 - (7.8409759171899901e-10 * fConst7));
161 fConst38 = ((fConst0 * (fConst13 + -2.0047872746271098e-06)) + 0.00048978515761155495);
162 fConst39 = (0.0 - (1.53346242879972e-11 * fConst7));
163 fConst40 = (fConst0 * (fConst15 + 3.9949085717896201e-05));
164 double fConst41 = (7.3737771693091102e-10 * fConst7);
165 fConst42 = (0.0097356111460356904 - fConst41);
166 fConst43 = ((fConst0 * (fConst11 + -3.0348555108869402e-06)) + 0.00486780557301784);
167 fConst44 = (8.6710157453912601e-07 * fConst0);
168 fConst45 = ((3.6868885846545499e-10 * fConst7) + -0.0031609127097518498);
169 fConst46 = (-0.0063218254195036901 - fConst41);
170 fConst47 = (1.0 / fConst9);
171 fConst48 = (5.3045340431887401e-08 - (8.6776936211013499e-10 * fConst7));
172 fConst49 = ((fConst0 * (fConst8 + -6.8680901344593704e-09)) + 2.6522670215943701e-08);
173 fConst50 = (((fConst2 - fConst4) / fConst1) + 1.0);
174 double fConst51 = (4435.1896285973553 / fConst3);
175 fConst52 = (((fConst2 + fConst51) / fConst1) + 1.0);
176 fConst53 = (((fConst2 - fConst51) / fConst1) + 1.0);
177 clear_state_f();
178 }
179
init_static(uint32_t sample_rate,PluginLV2 * p)180 void Dsp::init_static(uint32_t sample_rate, PluginLV2 *p)
181 {
182 static_cast<Dsp*>(p)->init(sample_rate);
183 }
184
compute(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0)185 void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0)
186 {
187 #define fVslider0 (*fVslider0_)
188 #define fVslider1 (*fVslider1_)
189 #define fVslider2 (*fVslider2_)
190 FAUSTFLOAT buf[smp.max_out_count(count)];
191 int ReCount = smp.up(count, input0, buf);
192 double fSlow0 = (0.0070000000000000062 * double(fVslider0));
193 double fSlow1 = (0.0070000000000000062 * double(fVslider1));
194 double fSlow2 = (0.0070000000000000062 * double(fVslider2));
195 for (int i0 = 0; (i0 < ReCount); i0 = (i0 + 1)) {
196 fRec5[0] = (double(buf[i0]) - (fConst18 * ((fConst21 * fRec5[2]) + (0.000438032628543473 * fRec5[1]))));
197 fRec6[0] = (fSlow0 + (0.99299999999999999 * fRec6[1]));
198 double fTemp0 = ((fConst0 * (fConst28 + (fRec6[0] * (fConst29 + (fConst30 * fRec6[0]))))) + 0.000146000960455196);
199 fRec4[0] = ((fConst18 * ((fConst20 * fRec5[2]) + (fConst19 * fRec5[0]))) - (((fRec4[1] * ((fConst7 * ((fRec6[0] * ((2.2689303962825102e-09 * fRec6[0]) + -2.2462410923196899e-09)) + -2.5642240040785998e-10)) + 0.00029200192091039201)) + (fRec4[2] * ((fConst0 * (fConst23 + (fRec6[0] * (fConst25 + (fConst27 * fRec6[0]))))) + 0.000146000960455196))) / fTemp0));
200 fRec3[0] = (double(symclip(double((fConst0 * ((((fRec4[0] * (fConst32 + (fConst34 * fRec6[0]))) + (fConst0 * (fRec4[1] * ((0.0 - (4.5258677430700104e-12 * fRec6[0])) + -4.5258677430700099e-14)))) + (fRec4[2] * (fConst35 + (fConst36 * fRec6[0])))) / fTemp0))))) - (fConst14 * ((fConst37 * fRec3[1]) + (fConst38 * fRec3[2]))));
201 fRec2[0] = (double(symclip(double((fConst14 * (((fConst16 * fRec3[0]) + (fConst39 * fRec3[1])) + (fConst40 * fRec3[2])))))) - (fConst12 * ((fConst42 * fRec2[1]) + (fConst43 * fRec2[2]))));
202 fRec7[0] = (fSlow1 + (0.99299999999999999 * fRec7[1]));
203 double fTemp1 = ((fConst45 * fRec7[0]) + 0.0040143591413848399);
204 fRec1[0] = ((fConst12 * (((fRec2[0] * (fConst44 + fTemp1)) + (fRec2[1] * ((fConst46 * fRec7[0]) + 0.0080287182827696903))) + (fRec2[2] * (fTemp1 - fConst44)))) - (fConst47 * ((fConst48 * fRec1[1]) + (fConst49 * fRec1[2]))));
205 fRec8[0] = (fSlow2 + (0.99299999999999999 * fRec8[1]));
206 double fTemp2 = (0.0 - (1.74325899023428e-09 * fRec8[0]));
207 double fTemp3 = (fConst6 * fRec0[1]);
208 fRec0[0] = ((fConst10 * (((fRec1[0] * fTemp2) + (3.4865179804685599e-09 * (fRec8[0] * fRec1[1]))) + (fRec1[2] * fTemp2))) - (fConst5 * ((fConst50 * fRec0[2]) + fTemp3)));
209 buf[i0] = FAUSTFLOAT((fConst5 * ((fTemp3 + (fConst52 * fRec0[0])) + (fConst53 * fRec0[2]))));
210 fRec5[2] = fRec5[1];
211 fRec5[1] = fRec5[0];
212 fRec6[1] = fRec6[0];
213 fRec4[2] = fRec4[1];
214 fRec4[1] = fRec4[0];
215 fRec3[2] = fRec3[1];
216 fRec3[1] = fRec3[0];
217 fRec2[2] = fRec2[1];
218 fRec2[1] = fRec2[0];
219 fRec7[1] = fRec7[0];
220 fRec1[2] = fRec1[1];
221 fRec1[1] = fRec1[0];
222 fRec8[1] = fRec8[0];
223 fRec0[2] = fRec0[1];
224 fRec0[1] = fRec0[0];
225 }
226 smp.down(buf, output0);
227 #undef fVslider0
228 #undef fVslider1
229 #undef fVslider2
230 }
231
compute_static(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0,PluginLV2 * p)232 void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2 *p)
233 {
234 static_cast<Dsp*>(p)->compute(count, input0, output0);
235 }
236
237
connect(uint32_t port,void * data)238 void Dsp::connect(uint32_t port,void* data)
239 {
240 switch ((PortIndex)port)
241 {
242 case SUSTAIN:
243 fVslider0_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
244 break;
245 case TONE:
246 fVslider1_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
247 break;
248 case VOLUME:
249 fVslider2_ = (float*)data; // , 0.5, 0.0, 1.0, 0.01
250 break;
251 default:
252 break;
253 }
254 }
255
connect_static(uint32_t port,void * data,PluginLV2 * p)256 void Dsp::connect_static(uint32_t port,void* data, PluginLV2 *p)
257 {
258 static_cast<Dsp*>(p)->connect(port, data);
259 }
260
261
plugin()262 PluginLV2 *plugin() {
263 return new Dsp();
264 }
265
del_instance(PluginLV2 * p)266 void Dsp::del_instance(PluginLV2 *p)
267 {
268 delete static_cast<Dsp*>(p);
269 }
270
271 /*
272 typedef enum
273 {
274 SUSTAIN,
275 TONE,
276 VOLUME,
277 } PortIndex;
278 */
279
280 } // end namespace bmp
281