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