1 // generated from file '../src/faust/digital_delay_st.dsp' by dsp2cc:
2 // Code generated with Faust (https://faust.grame.fr)
3 
4 #include "beat.h"
5 
6 namespace digital_delay_st {
7 
8 class Dsp: public PluginDef {
9 private:
10 	int fSampleRate;
11 	FAUSTFLOAT fVslider0;
12 	FAUSTFLOAT fCheckbox0;
13 	FAUSTFLOAT fVslider1;
14 	FAUSTFLOAT fHslider0;
15 	float fConst1;
16 	FAUSTFLOAT fHslider1;
17 	FAUSTFLOAT fHslider2;
18 	FAUSTFLOAT fVslider2;
19 	float fRec2[3];
20 	float fRec1[3];
21 	float fVec0[2];
22 	float fConst5;
23 	float fConst6;
24 	float fConst7;
25 	float fConst13;
26 	float fConst14;
27 	float fConst20;
28 	float fConst21;
29 	float fConst26;
30 	float fConst27;
31 	float fConst32;
32 	float fConst33;
33 	float fConst38;
34 	float fConst39;
35 	float fConst41;
36 	float fConst42;
37 	float fConst44;
38 	float fConst46;
39 	float fConst47;
40 	float fConst48;
41 	float fRec11[2];
42 	float fConst49;
43 	float fConst50;
44 	float fRec10[3];
45 	float fConst51;
46 	float fConst52;
47 	float fRec9[3];
48 	float fConst54;
49 	float fConst55;
50 	float fConst56;
51 	float fRec8[3];
52 	float fConst58;
53 	float fConst59;
54 	float fConst60;
55 	float fRec7[3];
56 	float fConst62;
57 	float fConst63;
58 	float fConst64;
59 	float fRec6[3];
60 	float fConst66;
61 	float fConst67;
62 	float fConst68;
63 	float fRec5[3];
64 	float fConst70;
65 	float fConst71;
66 	float fVec1[2];
67 	float fRec4[2];
68 	float fConst72;
69 	float fConst73;
70 	float fConst74;
71 	float fRec3[3];
72 	float fRec18[2];
73 	float fRec16[2];
74 	float fRec14[2];
75 	float fRec12[2];
76 	float fRec26[2];
77 	float fRec24[2];
78 	float fRec22[2];
79 	float fRec20[2];
80 	int IOTA;
81 	float *fVec2;
82 	FAUSTFLOAT fHslider3;
83 	float fConst75;
84 	FAUSTFLOAT fHslider4;
85 	float fConst76;
86 	float fConst77;
87 	float fRec28[2];
88 	float fRec29[2];
89 	float fRec30[2];
90 	float fRec31[2];
91 	float fRec0[2];
92 	float fRec34[3];
93 	float fRec33[3];
94 	float fVec3[2];
95 	float fRec43[2];
96 	float fRec42[3];
97 	float fRec41[3];
98 	float fRec40[3];
99 	float fRec39[3];
100 	float fRec38[3];
101 	float fRec37[3];
102 	float fVec4[2];
103 	float fRec36[2];
104 	float fRec35[3];
105 	float fRec50[2];
106 	float fRec48[2];
107 	float fRec46[2];
108 	float fRec44[2];
109 	float fRec58[2];
110 	float fRec56[2];
111 	float fRec54[2];
112 	float fRec52[2];
113 	float *fVec5;
114 	float fRec32[2];
115 
116 	bool mem_allocated;
117 	void mem_alloc();
118 	void mem_free();
119 	void clear_state_f();
120 	int activate(bool start);
121 	int load_ui_f(const UiBuilder& b, int form);
122 	static const char *glade_def;
123 	void init(unsigned int sample_rate);
124 	void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *input1, FAUSTFLOAT *output0, FAUSTFLOAT *output1);
125 	int register_par(const ParamReg& reg);
126 
127 	static void clear_state_f_static(PluginDef*);
128 	static int activate_static(bool start, PluginDef*);
129 	static int load_ui_f_static(const UiBuilder& b, int form);
130 	static void init_static(unsigned int sample_rate, PluginDef*);
131 	static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *input1, FAUSTFLOAT *output0, FAUSTFLOAT *output1, PluginDef*);
132 	static int register_params_static(const ParamReg& reg);
133 	static void del_instance(PluginDef *p);
134 public:
135 	Dsp();
136 	~Dsp();
137 };
138 
139 
140 
Dsp()141 Dsp::Dsp()
142 	: PluginDef(),
143 	  fVec2(0),
144 	  fVec5(0),
145 	  mem_allocated(false) {
146 	version = PLUGINDEF_VERSION;
147 	flags = 0;
148 	id = "didest";
149 	name = N_("Digital Stereo Delay");
150 	groups = 0;
151 	description = N_("Digital Delay Stereo Version"); // description (tooltip)
152 	category = N_("Echo / Delay");       // category
153 	shortname = N_("Digi Delay S");     // shortname
154 	mono_audio = 0;
155 	stereo_audio = compute_static;
156 	set_samplerate = init_static;
157 	activate_plugin = activate_static;
158 	register_params = register_params_static;
159 	load_ui = load_ui_f_static;
160 	clear_state = clear_state_f_static;
161 	delete_instance = del_instance;
162 }
163 
~Dsp()164 Dsp::~Dsp() {
165 }
166 
clear_state_f()167 inline void Dsp::clear_state_f()
168 {
169 	for (int l0 = 0; (l0 < 3); l0 = (l0 + 1)) fRec2[l0] = 0.0f;
170 	for (int l1 = 0; (l1 < 3); l1 = (l1 + 1)) fRec1[l1] = 0.0f;
171 	for (int l2 = 0; (l2 < 2); l2 = (l2 + 1)) fVec0[l2] = 0.0f;
172 	for (int l3 = 0; (l3 < 2); l3 = (l3 + 1)) fRec11[l3] = 0.0f;
173 	for (int l4 = 0; (l4 < 3); l4 = (l4 + 1)) fRec10[l4] = 0.0f;
174 	for (int l5 = 0; (l5 < 3); l5 = (l5 + 1)) fRec9[l5] = 0.0f;
175 	for (int l6 = 0; (l6 < 3); l6 = (l6 + 1)) fRec8[l6] = 0.0f;
176 	for (int l7 = 0; (l7 < 3); l7 = (l7 + 1)) fRec7[l7] = 0.0f;
177 	for (int l8 = 0; (l8 < 3); l8 = (l8 + 1)) fRec6[l8] = 0.0f;
178 	for (int l9 = 0; (l9 < 3); l9 = (l9 + 1)) fRec5[l9] = 0.0f;
179 	for (int l10 = 0; (l10 < 2); l10 = (l10 + 1)) fVec1[l10] = 0.0f;
180 	for (int l11 = 0; (l11 < 2); l11 = (l11 + 1)) fRec4[l11] = 0.0f;
181 	for (int l12 = 0; (l12 < 3); l12 = (l12 + 1)) fRec3[l12] = 0.0f;
182 	for (int l13 = 0; (l13 < 2); l13 = (l13 + 1)) fRec18[l13] = 0.0f;
183 	for (int l14 = 0; (l14 < 2); l14 = (l14 + 1)) fRec16[l14] = 0.0f;
184 	for (int l15 = 0; (l15 < 2); l15 = (l15 + 1)) fRec14[l15] = 0.0f;
185 	for (int l16 = 0; (l16 < 2); l16 = (l16 + 1)) fRec12[l16] = 0.0f;
186 	for (int l17 = 0; (l17 < 2); l17 = (l17 + 1)) fRec26[l17] = 0.0f;
187 	for (int l18 = 0; (l18 < 2); l18 = (l18 + 1)) fRec24[l18] = 0.0f;
188 	for (int l19 = 0; (l19 < 2); l19 = (l19 + 1)) fRec22[l19] = 0.0f;
189 	for (int l20 = 0; (l20 < 2); l20 = (l20 + 1)) fRec20[l20] = 0.0f;
190 	for (int l21 = 0; (l21 < 1048576); l21 = (l21 + 1)) fVec2[l21] = 0.0f;
191 	for (int l22 = 0; (l22 < 2); l22 = (l22 + 1)) fRec28[l22] = 0.0f;
192 	for (int l23 = 0; (l23 < 2); l23 = (l23 + 1)) fRec29[l23] = 0.0f;
193 	for (int l24 = 0; (l24 < 2); l24 = (l24 + 1)) fRec30[l24] = 0.0f;
194 	for (int l25 = 0; (l25 < 2); l25 = (l25 + 1)) fRec31[l25] = 0.0f;
195 	for (int l26 = 0; (l26 < 2); l26 = (l26 + 1)) fRec0[l26] = 0.0f;
196 	for (int l27 = 0; (l27 < 3); l27 = (l27 + 1)) fRec34[l27] = 0.0f;
197 	for (int l28 = 0; (l28 < 3); l28 = (l28 + 1)) fRec33[l28] = 0.0f;
198 	for (int l29 = 0; (l29 < 2); l29 = (l29 + 1)) fVec3[l29] = 0.0f;
199 	for (int l30 = 0; (l30 < 2); l30 = (l30 + 1)) fRec43[l30] = 0.0f;
200 	for (int l31 = 0; (l31 < 3); l31 = (l31 + 1)) fRec42[l31] = 0.0f;
201 	for (int l32 = 0; (l32 < 3); l32 = (l32 + 1)) fRec41[l32] = 0.0f;
202 	for (int l33 = 0; (l33 < 3); l33 = (l33 + 1)) fRec40[l33] = 0.0f;
203 	for (int l34 = 0; (l34 < 3); l34 = (l34 + 1)) fRec39[l34] = 0.0f;
204 	for (int l35 = 0; (l35 < 3); l35 = (l35 + 1)) fRec38[l35] = 0.0f;
205 	for (int l36 = 0; (l36 < 3); l36 = (l36 + 1)) fRec37[l36] = 0.0f;
206 	for (int l37 = 0; (l37 < 2); l37 = (l37 + 1)) fVec4[l37] = 0.0f;
207 	for (int l38 = 0; (l38 < 2); l38 = (l38 + 1)) fRec36[l38] = 0.0f;
208 	for (int l39 = 0; (l39 < 3); l39 = (l39 + 1)) fRec35[l39] = 0.0f;
209 	for (int l40 = 0; (l40 < 2); l40 = (l40 + 1)) fRec50[l40] = 0.0f;
210 	for (int l41 = 0; (l41 < 2); l41 = (l41 + 1)) fRec48[l41] = 0.0f;
211 	for (int l42 = 0; (l42 < 2); l42 = (l42 + 1)) fRec46[l42] = 0.0f;
212 	for (int l43 = 0; (l43 < 2); l43 = (l43 + 1)) fRec44[l43] = 0.0f;
213 	for (int l44 = 0; (l44 < 2); l44 = (l44 + 1)) fRec58[l44] = 0.0f;
214 	for (int l45 = 0; (l45 < 2); l45 = (l45 + 1)) fRec56[l45] = 0.0f;
215 	for (int l46 = 0; (l46 < 2); l46 = (l46 + 1)) fRec54[l46] = 0.0f;
216 	for (int l47 = 0; (l47 < 2); l47 = (l47 + 1)) fRec52[l47] = 0.0f;
217 	for (int l48 = 0; (l48 < 1048576); l48 = (l48 + 1)) fVec5[l48] = 0.0f;
218 	for (int l49 = 0; (l49 < 2); l49 = (l49 + 1)) fRec32[l49] = 0.0f;
219 }
220 
clear_state_f_static(PluginDef * p)221 void Dsp::clear_state_f_static(PluginDef *p)
222 {
223 	static_cast<Dsp*>(p)->clear_state_f();
224 }
225 
init(unsigned int sample_rate)226 inline void Dsp::init(unsigned int sample_rate)
227 {
228 	fSampleRate = sample_rate;
229 	float fConst0 = std::min<float>(192000.0f, std::max<float>(1.0f, float(fSampleRate)));
230 	fConst1 = (3.14159274f / fConst0);
231 	float fConst2 = std::tan((37699.1133f / fConst0));
232 	float fConst3 = (1.0f / fConst2);
233 	float fConst4 = (((fConst3 + 1.0f) / fConst2) + 1.0f);
234 	fConst5 = (0.800000012f / fConst4);
235 	fConst6 = (1.0f / (fConst3 + 1.0f));
236 	fConst7 = (1.0f - fConst3);
237 	float fConst8 = (25132.7422f / fConst0);
238 	float fConst9 = std::tan(fConst8);
239 	float fConst10 = (1.0f / fConst9);
240 	float fConst11 = (fConst0 * std::sin((50265.4844f / fConst0)));
241 	float fConst12 = (3141.59277f / fConst11);
242 	fConst13 = (1.0f / (((fConst10 + fConst12) / fConst9) + 1.0f));
243 	fConst14 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst9))));
244 	float fConst15 = (12566.3711f / fConst0);
245 	float fConst16 = std::tan(fConst15);
246 	float fConst17 = (1.0f / fConst16);
247 	float fConst18 = (fConst0 * std::sin(fConst8));
248 	float fConst19 = (6268.30127f / fConst18);
249 	fConst20 = (1.0f / (((fConst17 + fConst19) / fConst16) + 1.0f));
250 	fConst21 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst16))));
251 	float fConst22 = std::tan((6283.18555f / fConst0));
252 	float fConst23 = (1.0f / fConst22);
253 	float fConst24 = (fConst0 * std::sin(fConst15));
254 	float fConst25 = (1570.79639f / fConst24);
255 	fConst26 = (1.0f / (((fConst23 + fConst25) / fConst22) + 1.0f));
256 	fConst27 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst22))));
257 	float fConst28 = std::tan((1178.09729f / fConst0));
258 	float fConst29 = (1.0f / fConst28);
259 	float fConst30 = (fConst0 * std::sin((2356.19458f / fConst0)));
260 	float fConst31 = (392.699097f / fConst30);
261 	fConst32 = (1.0f / (((fConst29 + fConst31) / fConst28) + 1.0f));
262 	fConst33 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst28))));
263 	float fConst34 = std::tan((628.318542f / fConst0));
264 	float fConst35 = (1.0f / fConst34);
265 	float fConst36 = (fConst0 * std::sin((1256.63708f / fConst0)));
266 	float fConst37 = (221.880875f / fConst36);
267 	fConst38 = (1.0f / (((fConst35 + fConst37) / fConst34) + 1.0f));
268 	fConst39 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst34))));
269 	float fConst40 = std::tan((251.327408f / fConst0));
270 	fConst41 = (1.0f / fConst40);
271 	fConst42 = (1.0f / (((fConst41 + 1.0f) / fConst40) + 1.0f));
272 	float fConst43 = mydsp_faustpower2_f(fConst40);
273 	fConst44 = (1.0f / fConst43);
274 	float fConst45 = (fConst41 + 1.0f);
275 	fConst46 = (0.0f - (1.0f / (fConst40 * fConst45)));
276 	fConst47 = (1.0f / fConst45);
277 	fConst48 = (1.0f - fConst41);
278 	fConst49 = (((fConst41 + -1.0f) / fConst40) + 1.0f);
279 	fConst50 = (2.0f * (1.0f - fConst44));
280 	fConst51 = (0.0f - (2.0f / fConst43));
281 	fConst52 = (((fConst35 - fConst37) / fConst34) + 1.0f);
282 	float fConst53 = (157.079636f / fConst36);
283 	fConst54 = (((fConst35 + fConst53) / fConst34) + 1.0f);
284 	fConst55 = (((fConst35 - fConst53) / fConst34) + 1.0f);
285 	fConst56 = (((fConst29 - fConst31) / fConst28) + 1.0f);
286 	float fConst57 = (466.723724f / fConst30);
287 	fConst58 = (((fConst29 + fConst57) / fConst28) + 1.0f);
288 	fConst59 = (((fConst29 - fConst57) / fConst28) + 1.0f);
289 	fConst60 = (((fConst23 - fConst25) / fConst22) + 1.0f);
290 	float fConst61 = (2218.80884f / fConst24);
291 	fConst62 = (((fConst23 + fConst61) / fConst22) + 1.0f);
292 	fConst63 = (((fConst23 - fConst61) / fConst22) + 1.0f);
293 	fConst64 = (((fConst17 - fConst19) / fConst16) + 1.0f);
294 	float fConst65 = (3141.59277f / fConst18);
295 	fConst66 = (((fConst17 + fConst65) / fConst16) + 1.0f);
296 	fConst67 = (((fConst17 - fConst65) / fConst16) + 1.0f);
297 	fConst68 = (((fConst10 - fConst12) / fConst9) + 1.0f);
298 	float fConst69 = (3955.03076f / fConst11);
299 	fConst70 = (((fConst10 + fConst69) / fConst9) + 1.0f);
300 	fConst71 = (((fConst10 - fConst69) / fConst9) + 1.0f);
301 	fConst72 = (1.0f / fConst4);
302 	fConst73 = (((fConst3 + -1.0f) / fConst2) + 1.0f);
303 	fConst74 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fConst2))));
304 	fConst75 = (60.0f * fConst0);
305 	fConst76 = (10.0f / fConst0);
306 	fConst77 = (0.0f - fConst76);
307 	IOTA = 0;
308 }
309 
init_static(unsigned int sample_rate,PluginDef * p)310 void Dsp::init_static(unsigned int sample_rate, PluginDef *p)
311 {
312 	static_cast<Dsp*>(p)->init(sample_rate);
313 }
314 
mem_alloc()315 void Dsp::mem_alloc()
316 {
317 	if (!fVec2) fVec2 = new float[1048576];
318 	if (!fVec5) fVec5 = new float[1048576];
319 	mem_allocated = true;
320 }
321 
mem_free()322 void Dsp::mem_free()
323 {
324 	mem_allocated = false;
325 	if (fVec2) { delete fVec2; fVec2 = 0; }
326 	if (fVec5) { delete fVec5; fVec5 = 0; }
327 }
328 
activate(bool start)329 int Dsp::activate(bool start)
330 {
331 	if (start) {
332 		if (!mem_allocated) {
333 			mem_alloc();
334 			clear_state_f();
335 		}
336 	} else if (mem_allocated) {
337 		mem_free();
338 	}
339 	return 0;
340 }
341 
activate_static(bool start,PluginDef * p)342 int Dsp::activate_static(bool start, PluginDef *p)
343 {
344 	return static_cast<Dsp*>(p)->activate(start);
345 }
346 
compute(int count,FAUSTFLOAT * input0,FAUSTFLOAT * input1,FAUSTFLOAT * output0,FAUSTFLOAT * output1)347 void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *input1, FAUSTFLOAT *output0, FAUSTFLOAT *output1)
348 {
349 	float fSlow0 = (0.00999999978f * float(fVslider0));
350 	float fSlow1 = float(fCheckbox0);
351 	int iSlow2 = int(fSlow1);
352 	float fSlow3 = (0.00999999978f * float(fVslider1));
353 	float fSlow4 = float(fHslider0);
354 	int iSlow5 = int(std::min<float>(2.0f, std::max<float>(0.0f, (fSlow4 + -2.0f))));
355 	int iSlow6 = (iSlow5 == 0);
356 	int iSlow7 = (iSlow5 == 1);
357 	int iSlow8 = int(std::min<float>(2.0f, std::max<float>(0.0f, (fSlow4 + -1.0f))));
358 	int iSlow9 = (iSlow8 == 0);
359 	int iSlow10 = (iSlow8 == 1);
360 	int iSlow11 = int(std::min<float>(2.0f, std::max<float>(0.0f, fSlow4)));
361 	int iSlow12 = (iSlow11 == 0);
362 	int iSlow13 = (iSlow11 == 1);
363 	float fSlow14 = std::tan((fConst1 * float(fHslider1)));
364 	float fSlow15 = (1.0f / fSlow14);
365 	float fSlow16 = (((fSlow15 + 1.41421354f) / fSlow14) + 1.0f);
366 	float fSlow17 = (1.0f / fSlow16);
367 	float fSlow18 = std::tan((fConst1 * float(fHslider2)));
368 	float fSlow19 = (1.0f / fSlow18);
369 	float fSlow20 = (1.0f / (((fSlow19 + 1.41421354f) / fSlow18) + 1.0f));
370 	float fSlow21 = mydsp_faustpower2_f(fSlow18);
371 	float fSlow22 = (1.0f / fSlow21);
372 	float fSlow23 = (0.00999999978f * float(fVslider2));
373 	float fSlow24 = (((fSlow19 + -1.41421354f) / fSlow18) + 1.0f);
374 	float fSlow25 = (2.0f * (1.0f - fSlow22));
375 	float fSlow26 = (0.0f - (2.0f / fSlow21));
376 	float fSlow27 = (((fSlow15 + -1.41421354f) / fSlow14) + 1.0f);
377 	float fSlow28 = (2.0f * (1.0f - (1.0f / mydsp_faustpower2_f(fSlow14))));
378 	float fSlow29 = (fConst41 / fSlow16);
379 	float fSlow30 = (1.0f - fSlow1);
380 	float fSlow31 = std::min<float>(524288.0f, float(B2N(int(float(fHslider3)), float((fConst75 / float(fHslider4))))));
381 	for (int i0 = 0; (i0 < count); i0 = (i0 + 1)) {
382 		float fTemp0 = float(input0[i0]);
383 		fRec2[0] = ((fSlow23 * fRec0[1]) - (fSlow20 * ((fSlow24 * fRec2[2]) + (fSlow25 * fRec2[1]))));
384 		fRec1[0] = ((fSlow20 * (((fSlow22 * fRec2[0]) + (fSlow26 * fRec2[1])) + (fSlow22 * fRec2[2]))) - (fSlow17 * ((fSlow27 * fRec1[2]) + (fSlow28 * fRec1[1]))));
385 		float fTemp1 = (fRec1[2] + (fRec1[0] + (2.0f * fRec1[1])));
386 		float fTemp2 = (fSlow17 * fTemp1);
387 		fVec0[0] = fTemp2;
388 		fRec11[0] = ((fConst46 * fVec0[1]) - (fConst47 * ((fConst48 * fRec11[1]) - (fSlow29 * fTemp1))));
389 		fRec10[0] = (fRec11[0] - (fConst42 * ((fConst49 * fRec10[2]) + (fConst50 * fRec10[1]))));
390 		float fTemp3 = (fConst39 * fRec9[1]);
391 		fRec9[0] = ((fConst42 * (((fConst44 * fRec10[0]) + (fConst51 * fRec10[1])) + (fConst44 * fRec10[2]))) - (fConst38 * ((fConst52 * fRec9[2]) + fTemp3)));
392 		float fTemp4 = (fConst33 * fRec8[1]);
393 		fRec8[0] = ((fConst38 * ((fTemp3 + (fConst54 * fRec9[0])) + (fConst55 * fRec9[2]))) - (fConst32 * ((fConst56 * fRec8[2]) + fTemp4)));
394 		float fTemp5 = (fConst27 * fRec7[1]);
395 		fRec7[0] = ((fConst32 * ((fTemp4 + (fConst58 * fRec8[0])) + (fConst59 * fRec8[2]))) - (fConst26 * ((fConst60 * fRec7[2]) + fTemp5)));
396 		float fTemp6 = (fConst21 * fRec6[1]);
397 		fRec6[0] = ((fConst26 * ((fTemp5 + (fConst62 * fRec7[0])) + (fConst63 * fRec7[2]))) - (fConst20 * ((fConst64 * fRec6[2]) + fTemp6)));
398 		float fTemp7 = (fConst14 * fRec5[1]);
399 		fRec5[0] = ((fConst20 * ((fTemp6 + (fConst66 * fRec6[0])) + (fConst67 * fRec6[2]))) - (fConst13 * ((fConst68 * fRec5[2]) + fTemp7)));
400 		float fTemp8 = ((fTemp7 + (fConst70 * fRec5[0])) + (fConst71 * fRec5[2]));
401 		fVec1[0] = fTemp8;
402 		fRec4[0] = (0.0f - (fConst6 * ((fConst7 * fRec4[1]) - (fConst13 * (fTemp8 + fVec1[1])))));
403 		fRec3[0] = (fRec4[0] - (fConst72 * ((fConst73 * fRec3[2]) + (fConst74 * fRec3[1]))));
404 		float fElse0 = (fConst5 * (fRec3[2] + (fRec3[0] + (2.0f * fRec3[1]))));
405 		float fThen1 = (iSlow13 ? fElse0 : fTemp2);
406 		float fTemp9 = (iSlow12 ? fTemp2 : fThen1);
407 		float fTemp10 = (0.200000003f * fRec14[1]);
408 		float fTemp11 = (0.100000001f * fRec12[1]);
409 		float fTemp12 = ((0.400000006f * fRec16[1]) + fTemp11);
410 		float fTemp13 = ((fTemp10 + (fTemp9 + (0.600000024f * fRec18[1]))) - fTemp12);
411 		fRec18[0] = fTemp13;
412 		float fRec19 = (0.0f - (0.600000024f * fTemp13));
413 		fRec16[0] = (fRec19 + fRec18[1]);
414 		float fTemp14 = (fTemp9 + fTemp10);
415 		float fRec17 = (0.400000006f * (fTemp14 - fTemp12));
416 		fRec14[0] = (fRec17 + fRec16[1]);
417 		float fRec15 = (0.0f - (0.200000003f * (fTemp14 - fTemp11)));
418 		fRec12[0] = (fRec15 + fRec14[1]);
419 		float fRec13 = (0.100000001f * (fTemp9 - fTemp11));
420 		float fElse2 = (fRec13 + fRec12[1]);
421 		float fThen3 = (iSlow10 ? fElse2 : fTemp9);
422 		float fTemp15 = (iSlow9 ? fTemp9 : fThen3);
423 		float fTemp16 = (0.300000012f * fRec24[1]);
424 		float fTemp17 = (0.5f * fRec20[1]);
425 		float fTemp18 = ((0.400000006f * fRec22[1]) + fTemp17);
426 		float fTemp19 = ((fTemp16 + (fTemp15 + (0.200000003f * fRec26[1]))) - fTemp18);
427 		fRec26[0] = fTemp19;
428 		float fRec27 = (0.0f - (0.200000003f * fTemp19));
429 		fRec24[0] = (fRec27 + fRec26[1]);
430 		float fRec25 = (0.0f - (0.300000012f * ((fTemp15 + fTemp16) - fTemp18)));
431 		fRec22[0] = (fRec25 + fRec24[1]);
432 		float fRec23 = (0.400000006f * (fTemp15 - fTemp18));
433 		fRec20[0] = (fRec23 + fRec22[1]);
434 		float fRec21 = (0.5f * (fTemp15 - fTemp17));
435 		float fElse4 = (fRec21 + fRec20[1]);
436 		float fThen5 = (iSlow7 ? fElse4 : fTemp15);
437 		float fThen6 = (iSlow6 ? fTemp15 : fThen5);
438 		float fTemp20 = ((iSlow2 ? fRec0[1] : fThen6) + (fSlow30 * fTemp0));
439 		fVec2[(IOTA & 1048575)] = fTemp20;
440 		float fThen8 = (((fRec29[1] == 1.0f) & (fSlow31 != fRec31[1])) ? fConst77 : 0.0f);
441 		float fThen10 = (((fRec29[1] == 0.0f) & (fSlow31 != fRec30[1])) ? fConst76 : fThen8);
442 		float fElse10 = (((fRec29[1] > 0.0f) & (fRec29[1] < 1.0f)) ? fRec28[1] : 0.0f);
443 		float fTemp21 = ((fRec28[1] != 0.0f) ? fElse10 : fThen10);
444 		fRec28[0] = fTemp21;
445 		fRec29[0] = std::max<float>(0.0f, std::min<float>(1.0f, (fRec29[1] + fTemp21)));
446 		fRec30[0] = (((fRec29[1] >= 1.0f) & (fRec31[1] != fSlow31)) ? fSlow31 : fRec30[1]);
447 		fRec31[0] = (((fRec29[1] <= 0.0f) & (fRec30[1] != fSlow31)) ? fSlow31 : fRec31[1]);
448 		int iTemp22 = int(std::min<float>(524288.0f, std::max<float>(0.0f, fRec30[0])));
449 		float fTemp23 = fVec2[((IOTA - iTemp22) & 1048575)];
450 		int iTemp24 = int(std::min<float>(524288.0f, std::max<float>(0.0f, fRec31[0])));
451 		float fTemp25 = (fTemp23 + (fRec29[0] * (fVec2[((IOTA - iTemp24) & 1048575)] - fTemp23)));
452 		float fThen13 = (fSlow3 * fTemp25);
453 		fRec0[0] = (iSlow2 ? fTemp25 : fThen13);
454 		output0[i0] = FAUSTFLOAT((fTemp0 + (fSlow0 * fRec0[0])));
455 		float fTemp26 = float(input1[i0]);
456 		fRec34[0] = ((fSlow23 * fRec32[1]) - (fSlow20 * ((fSlow24 * fRec34[2]) + (fSlow25 * fRec34[1]))));
457 		fRec33[0] = ((fSlow20 * (((fSlow22 * fRec34[0]) + (fSlow26 * fRec34[1])) + (fSlow22 * fRec34[2]))) - (fSlow17 * ((fSlow27 * fRec33[2]) + (fSlow28 * fRec33[1]))));
458 		float fTemp27 = (fRec33[2] + (fRec33[0] + (2.0f * fRec33[1])));
459 		float fTemp28 = (fSlow17 * fTemp27);
460 		fVec3[0] = fTemp28;
461 		fRec43[0] = ((fConst46 * fVec3[1]) - (fConst47 * ((fConst48 * fRec43[1]) - (fSlow29 * fTemp27))));
462 		fRec42[0] = (fRec43[0] - (fConst42 * ((fConst49 * fRec42[2]) + (fConst50 * fRec42[1]))));
463 		float fTemp29 = (fConst39 * fRec41[1]);
464 		fRec41[0] = ((fConst42 * (((fConst44 * fRec42[0]) + (fConst51 * fRec42[1])) + (fConst44 * fRec42[2]))) - (fConst38 * ((fConst52 * fRec41[2]) + fTemp29)));
465 		float fTemp30 = (fConst33 * fRec40[1]);
466 		fRec40[0] = ((fConst38 * ((fTemp29 + (fConst54 * fRec41[0])) + (fConst55 * fRec41[2]))) - (fConst32 * ((fConst56 * fRec40[2]) + fTemp30)));
467 		float fTemp31 = (fConst27 * fRec39[1]);
468 		fRec39[0] = ((fConst32 * ((fTemp30 + (fConst58 * fRec40[0])) + (fConst59 * fRec40[2]))) - (fConst26 * ((fConst60 * fRec39[2]) + fTemp31)));
469 		float fTemp32 = (fConst21 * fRec38[1]);
470 		fRec38[0] = ((fConst26 * ((fTemp31 + (fConst62 * fRec39[0])) + (fConst63 * fRec39[2]))) - (fConst20 * ((fConst64 * fRec38[2]) + fTemp32)));
471 		float fTemp33 = (fConst14 * fRec37[1]);
472 		fRec37[0] = ((fConst20 * ((fTemp32 + (fConst66 * fRec38[0])) + (fConst67 * fRec38[2]))) - (fConst13 * ((fConst68 * fRec37[2]) + fTemp33)));
473 		float fTemp34 = ((fTemp33 + (fConst70 * fRec37[0])) + (fConst71 * fRec37[2]));
474 		fVec4[0] = fTemp34;
475 		fRec36[0] = (0.0f - (fConst6 * ((fConst7 * fRec36[1]) - (fConst13 * (fTemp34 + fVec4[1])))));
476 		fRec35[0] = (fRec36[0] - (fConst72 * ((fConst73 * fRec35[2]) + (fConst74 * fRec35[1]))));
477 		float fElse14 = (fConst5 * (fRec35[2] + (fRec35[0] + (2.0f * fRec35[1]))));
478 		float fThen15 = (iSlow13 ? fElse14 : fTemp28);
479 		float fTemp35 = (iSlow12 ? fTemp28 : fThen15);
480 		float fTemp36 = (0.200000003f * fRec46[1]);
481 		float fTemp37 = (0.100000001f * fRec44[1]);
482 		float fTemp38 = ((0.400000006f * fRec48[1]) + fTemp37);
483 		float fTemp39 = ((fTemp36 + (fTemp35 + (0.600000024f * fRec50[1]))) - fTemp38);
484 		fRec50[0] = fTemp39;
485 		float fRec51 = (0.0f - (0.600000024f * fTemp39));
486 		fRec48[0] = (fRec51 + fRec50[1]);
487 		float fTemp40 = (fTemp35 + fTemp36);
488 		float fRec49 = (0.400000006f * (fTemp40 - fTemp38));
489 		fRec46[0] = (fRec49 + fRec48[1]);
490 		float fRec47 = (0.0f - (0.200000003f * (fTemp40 - fTemp37)));
491 		fRec44[0] = (fRec47 + fRec46[1]);
492 		float fRec45 = (0.100000001f * (fTemp35 - fTemp37));
493 		float fElse16 = (fRec45 + fRec44[1]);
494 		float fThen17 = (iSlow10 ? fElse16 : fTemp35);
495 		float fTemp41 = (iSlow9 ? fTemp35 : fThen17);
496 		float fTemp42 = (0.300000012f * fRec56[1]);
497 		float fTemp43 = (0.5f * fRec52[1]);
498 		float fTemp44 = ((0.400000006f * fRec54[1]) + fTemp43);
499 		float fTemp45 = ((fTemp42 + (fTemp41 + (0.200000003f * fRec58[1]))) - fTemp44);
500 		fRec58[0] = fTemp45;
501 		float fRec59 = (0.0f - (0.200000003f * fTemp45));
502 		fRec56[0] = (fRec59 + fRec58[1]);
503 		float fRec57 = (0.0f - (0.300000012f * ((fTemp41 + fTemp42) - fTemp44)));
504 		fRec54[0] = (fRec57 + fRec56[1]);
505 		float fRec55 = (0.400000006f * (fTemp41 - fTemp44));
506 		fRec52[0] = (fRec55 + fRec54[1]);
507 		float fRec53 = (0.5f * (fTemp41 - fTemp43));
508 		float fElse18 = (fRec53 + fRec52[1]);
509 		float fThen19 = (iSlow7 ? fElse18 : fTemp41);
510 		float fThen20 = (iSlow6 ? fTemp41 : fThen19);
511 		float fTemp46 = ((iSlow2 ? fRec32[1] : fThen20) + (fSlow30 * fTemp26));
512 		fVec5[(IOTA & 1048575)] = fTemp46;
513 		float fTemp47 = fVec5[((IOTA - iTemp22) & 1048575)];
514 		float fTemp48 = (fTemp47 + (fRec29[0] * (fVec5[((IOTA - iTemp24) & 1048575)] - fTemp47)));
515 		float fThen21 = (fSlow3 * fTemp48);
516 		fRec32[0] = (iSlow2 ? fTemp48 : fThen21);
517 		output1[i0] = FAUSTFLOAT((fTemp26 + (fSlow0 * fRec32[0])));
518 		fRec2[2] = fRec2[1];
519 		fRec2[1] = fRec2[0];
520 		fRec1[2] = fRec1[1];
521 		fRec1[1] = fRec1[0];
522 		fVec0[1] = fVec0[0];
523 		fRec11[1] = fRec11[0];
524 		fRec10[2] = fRec10[1];
525 		fRec10[1] = fRec10[0];
526 		fRec9[2] = fRec9[1];
527 		fRec9[1] = fRec9[0];
528 		fRec8[2] = fRec8[1];
529 		fRec8[1] = fRec8[0];
530 		fRec7[2] = fRec7[1];
531 		fRec7[1] = fRec7[0];
532 		fRec6[2] = fRec6[1];
533 		fRec6[1] = fRec6[0];
534 		fRec5[2] = fRec5[1];
535 		fRec5[1] = fRec5[0];
536 		fVec1[1] = fVec1[0];
537 		fRec4[1] = fRec4[0];
538 		fRec3[2] = fRec3[1];
539 		fRec3[1] = fRec3[0];
540 		fRec18[1] = fRec18[0];
541 		fRec16[1] = fRec16[0];
542 		fRec14[1] = fRec14[0];
543 		fRec12[1] = fRec12[0];
544 		fRec26[1] = fRec26[0];
545 		fRec24[1] = fRec24[0];
546 		fRec22[1] = fRec22[0];
547 		fRec20[1] = fRec20[0];
548 		IOTA = (IOTA + 1);
549 		fRec28[1] = fRec28[0];
550 		fRec29[1] = fRec29[0];
551 		fRec30[1] = fRec30[0];
552 		fRec31[1] = fRec31[0];
553 		fRec0[1] = fRec0[0];
554 		fRec34[2] = fRec34[1];
555 		fRec34[1] = fRec34[0];
556 		fRec33[2] = fRec33[1];
557 		fRec33[1] = fRec33[0];
558 		fVec3[1] = fVec3[0];
559 		fRec43[1] = fRec43[0];
560 		fRec42[2] = fRec42[1];
561 		fRec42[1] = fRec42[0];
562 		fRec41[2] = fRec41[1];
563 		fRec41[1] = fRec41[0];
564 		fRec40[2] = fRec40[1];
565 		fRec40[1] = fRec40[0];
566 		fRec39[2] = fRec39[1];
567 		fRec39[1] = fRec39[0];
568 		fRec38[2] = fRec38[1];
569 		fRec38[1] = fRec38[0];
570 		fRec37[2] = fRec37[1];
571 		fRec37[1] = fRec37[0];
572 		fVec4[1] = fVec4[0];
573 		fRec36[1] = fRec36[0];
574 		fRec35[2] = fRec35[1];
575 		fRec35[1] = fRec35[0];
576 		fRec50[1] = fRec50[0];
577 		fRec48[1] = fRec48[0];
578 		fRec46[1] = fRec46[0];
579 		fRec44[1] = fRec44[0];
580 		fRec58[1] = fRec58[0];
581 		fRec56[1] = fRec56[0];
582 		fRec54[1] = fRec54[0];
583 		fRec52[1] = fRec52[0];
584 		fRec32[1] = fRec32[0];
585 	}
586 }
587 
compute_static(int count,FAUSTFLOAT * input0,FAUSTFLOAT * input1,FAUSTFLOAT * output0,FAUSTFLOAT * output1,PluginDef * p)588 void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *input1, FAUSTFLOAT *output0, FAUSTFLOAT *output1, PluginDef *p)
589 {
590 	static_cast<Dsp*>(p)->compute(count, input0, input1, output0, output1);
591 }
592 
register_par(const ParamReg & reg)593 int Dsp::register_par(const ParamReg& reg)
594 {
595 	reg.registerFloatVar("didest.Freeze",N_("Freeze"),"B",N_("Freeze the current delay"),&fCheckbox0, 0.0, 0.0, 1.0, 1.0, 0);
596 	reg.registerFloatVar("didest.bpm",N_("BPM"),"S",N_("Delay in Beats per Minute"),&fHslider4, 120.0f, 24.0f, 360.0f, 1.0f, 0);
597 	reg.registerFloatVar("didest.feedback",N_("Feedback"),"S",N_("Percentage of the feedback level in the de.delay loop"),&fVslider2, 50.0f, 1.0f, 100.0f, 1.0f, 0);
598 	reg.registerFloatVar("didest.gain",N_("Gain"),"S",N_("Overall gain of the de.delay line in percent"),&fVslider0, 100.0f, 0.0f, 120.0f, 1.0f, 0);
599 	reg.registerFloatVar("didest.highpass",N_("Hipass"),"S",N_("Highpass filter frequency in the feedback loop"),&fHslider2, 120.0f, 20.0f, 20000.0f, 1.0f, 0);
600 	reg.registerFloatVar("didest.howpass",N_("Lopass"),"S",N_("Lowpass filter frequency in the feedback loop"),&fHslider1, 12000.0f, 20.0f, 20000.0f, 1.0f, 0);
601 	reg.registerFloatVar("didest.level",N_("Level"),"S",N_("Percentage of the de.delay gain level"),&fVslider1, 50.0f, 1.0f, 100.0f, 1.0f, 0);
602 	static const value_pair fHslider0_values[] = {{"plain"},{"presence"},{"tape"},{"tape2"},{0}};
603 	reg.registerFloatVar("didest.mode",N_("Mode"),"S","",&fHslider0, 0.0f, 0.0f, 3.0f, 1.0f, fHslider0_values);
604 	static const value_pair fHslider3_values[] = {{"Dotted 1/2 note"},{"1/2 note"},{"1/2 note triplets"},{" Dotted 1/4 note"},{"1/4 note"},{"1/4 note triplets"},{"Dotted 1/8 note"},{"1/8 note"},{"1/8 note triplets"},{" Dotted 1/16 note"},{"1/16 note"},{"1/16 note triplets"},{"Dotted 1/32 note"},{"1/32 note"},{"1/32 note triplets"},{" Dotted 1/64 note"},{"1/64 note"},{"1/64 note triplets"},{0}};
605 	reg.registerFloatVar("didest.notes",N_("Notes"),"S",N_("Note setting for bpm"),&fHslider3, 4.0f, 0.0f, 17.0f, 1.0f, fHslider3_values);
606 	return 0;
607 }
608 
register_params_static(const ParamReg & reg)609 int Dsp::register_params_static(const ParamReg& reg)
610 {
611 	return static_cast<Dsp*>(reg.plugin)->register_par(reg);
612 }
613 
614 const char *Dsp::glade_def = "\
615 <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
616 <!-- Generated with glade 3.22.1 -->\n\
617 <interface>\n\
618   <requires lib=\"gtk+\" version=\"3.20\"/>\n\
619   <requires lib=\"gxwidgets\" version=\"0.0\"/>\n\
620   <object class=\"GtkWindow\" id=\"window1\">\n\
621     <property name=\"can_focus\">False</property>\n\
622     <child>\n\
623       <placeholder/>\n\
624     </child>\n\
625     <child>\n\
626       <object class=\"GtkBox\" id=\"vbox1\">\n\
627         <property name=\"visible\">True</property>\n\
628         <property name=\"can_focus\">False</property>\n\
629         <property name=\"orientation\">vertical</property>\n\
630         <child>\n\
631           <object class=\"GtkBox\" id=\"rackbox\">\n\
632             <property name=\"visible\">True</property>\n\
633             <property name=\"can_focus\">False</property>\n\
634             <child>\n\
635               <object class=\"GtkBox\" id=\"vbox2\">\n\
636                 <property name=\"visible\">True</property>\n\
637                 <property name=\"can_focus\">False</property>\n\
638                 <property name=\"orientation\">vertical</property>\n\
639                 <child>\n\
640                   <object class=\"GtkLabel\" id=\"label1\">\n\
641                     <property name=\"visible\">True</property>\n\
642                     <property name=\"can_focus\">False</property>\n\
643                   </object>\n\
644                   <packing>\n\
645                     <property name=\"expand\">False</property>\n\
646                     <property name=\"fill\">False</property>\n\
647                     <property name=\"position\">0</property>\n\
648                   </packing>\n\
649                 </child>\n\
650                 <child>\n\
651                   <object class=\"GtkLabel\" id=\"label1:rack_label\">\n\
652                     <property name=\"visible\">True</property>\n\
653                     <property name=\"can_focus\">False</property>\n\
654                     <property name=\"label\" translatable=\"yes\">label</property>\n\
655                   </object>\n\
656                   <packing>\n\
657                     <property name=\"expand\">False</property>\n\
658                     <property name=\"fill\">False</property>\n\
659                     <property name=\"position\">1</property>\n\
660                   </packing>\n\
661                 </child>\n\
662                 <child>\n\
663                   <object class=\"GxMidKnob\" id=\"GxMidKnob1\">\n\
664                     <property name=\"visible\">True</property>\n\
665                     <property name=\"can_focus\">True</property>\n\
666                     <property name=\"receives_default\">True</property>\n\
667                     <property name=\"var_id\">didest.bpm</property>\n\
668                     <property name=\"label_ref\">label1:rack_label</property>\n\
669                   </object>\n\
670                   <packing>\n\
671                     <property name=\"expand\">True</property>\n\
672                     <property name=\"fill\">True</property>\n\
673                     <property name=\"position\">2</property>\n\
674                   </packing>\n\
675                 </child>\n\
676                 <child>\n\
677                   <object class=\"GtkLabel\" id=\"label2\">\n\
678                     <property name=\"visible\">True</property>\n\
679                     <property name=\"can_focus\">False</property>\n\
680                   </object>\n\
681                   <packing>\n\
682                     <property name=\"expand\">False</property>\n\
683                     <property name=\"fill\">False</property>\n\
684                     <property name=\"position\">3</property>\n\
685                   </packing>\n\
686                 </child>\n\
687               </object>\n\
688               <packing>\n\
689                 <property name=\"expand\">True</property>\n\
690                 <property name=\"fill\">True</property>\n\
691                 <property name=\"position\">0</property>\n\
692               </packing>\n\
693             </child>\n\
694             <child>\n\
695               <object class=\"GtkBox\" id=\"vbox8\">\n\
696                 <property name=\"visible\">True</property>\n\
697                 <property name=\"can_focus\">False</property>\n\
698                 <property name=\"halign\">center</property>\n\
699                 <property name=\"margin_bottom\">4</property>\n\
700                 <property name=\"orientation\">vertical</property>\n\
701                 <property name=\"spacing\">10</property>\n\
702                 <child>\n\
703                   <object class=\"GtkBox\" id=\"hbox1\">\n\
704                     <property name=\"visible\">True</property>\n\
705                     <property name=\"can_focus\">False</property>\n\
706                     <property name=\"spacing\">4</property>\n\
707                     <child>\n\
708                       <object class=\"GtkBox\" id=\"vbox3\">\n\
709                         <property name=\"visible\">True</property>\n\
710                         <property name=\"can_focus\">False</property>\n\
711                         <property name=\"orientation\">vertical</property>\n\
712                         <child>\n\
713                           <object class=\"GtkLabel\" id=\"label2:rack_label\">\n\
714                             <property name=\"visible\">True</property>\n\
715                             <property name=\"can_focus\">False</property>\n\
716                             <property name=\"label\" translatable=\"yes\">label</property>\n\
717                           </object>\n\
718                           <packing>\n\
719                             <property name=\"expand\">False</property>\n\
720                             <property name=\"fill\">False</property>\n\
721                             <property name=\"position\">0</property>\n\
722                           </packing>\n\
723                         </child>\n\
724                         <child>\n\
725                           <object class=\"GxSmallKnobR\" id=\"GxMidKnob2\">\n\
726                             <property name=\"visible\">True</property>\n\
727                             <property name=\"can_focus\">True</property>\n\
728                             <property name=\"receives_default\">True</property>\n\
729                             <property name=\"var_id\">didest.feedback</property>\n\
730                             <property name=\"label_ref\">label2:rack_label</property>\n\
731                           </object>\n\
732                           <packing>\n\
733                             <property name=\"expand\">False</property>\n\
734                             <property name=\"fill\">False</property>\n\
735                             <property name=\"position\">1</property>\n\
736                           </packing>\n\
737                         </child>\n\
738                       </object>\n\
739                       <packing>\n\
740                         <property name=\"expand\">True</property>\n\
741                         <property name=\"fill\">True</property>\n\
742                         <property name=\"position\">0</property>\n\
743                       </packing>\n\
744                     </child>\n\
745                     <child>\n\
746                       <object class=\"GtkBox\" id=\"vbox4\">\n\
747                         <property name=\"visible\">True</property>\n\
748                         <property name=\"can_focus\">False</property>\n\
749                         <property name=\"orientation\">vertical</property>\n\
750                         <child>\n\
751                           <object class=\"GtkLabel\" id=\"label3:rack_label\">\n\
752                             <property name=\"visible\">True</property>\n\
753                             <property name=\"can_focus\">False</property>\n\
754                             <property name=\"label\" translatable=\"yes\">label</property>\n\
755                           </object>\n\
756                           <packing>\n\
757                             <property name=\"expand\">False</property>\n\
758                             <property name=\"fill\">False</property>\n\
759                             <property name=\"position\">0</property>\n\
760                           </packing>\n\
761                         </child>\n\
762                         <child>\n\
763                           <object class=\"GxSmallKnobR\" id=\"GxMidKnob3\">\n\
764                             <property name=\"visible\">True</property>\n\
765                             <property name=\"can_focus\">True</property>\n\
766                             <property name=\"receives_default\">True</property>\n\
767                             <property name=\"var_id\">didest.level</property>\n\
768                             <property name=\"label_ref\">label3:rack_label</property>\n\
769                           </object>\n\
770                           <packing>\n\
771                             <property name=\"expand\">False</property>\n\
772                             <property name=\"fill\">False</property>\n\
773                             <property name=\"position\">1</property>\n\
774                           </packing>\n\
775                         </child>\n\
776                       </object>\n\
777                       <packing>\n\
778                         <property name=\"expand\">True</property>\n\
779                         <property name=\"fill\">True</property>\n\
780                         <property name=\"position\">1</property>\n\
781                       </packing>\n\
782                     </child>\n\
783                     <child>\n\
784                       <object class=\"GtkBox\" id=\"vbox5\">\n\
785                         <property name=\"visible\">True</property>\n\
786                         <property name=\"can_focus\">False</property>\n\
787                         <property name=\"orientation\">vertical</property>\n\
788                         <child>\n\
789                           <object class=\"GtkLabel\" id=\"label4:rack_label\">\n\
790                             <property name=\"visible\">True</property>\n\
791                             <property name=\"can_focus\">False</property>\n\
792                             <property name=\"label\" translatable=\"yes\">label</property>\n\
793                           </object>\n\
794                           <packing>\n\
795                             <property name=\"expand\">False</property>\n\
796                             <property name=\"fill\">False</property>\n\
797                             <property name=\"position\">0</property>\n\
798                           </packing>\n\
799                         </child>\n\
800                         <child>\n\
801                           <object class=\"GxSmallKnobR\" id=\"GxMidKnob4\">\n\
802                             <property name=\"visible\">True</property>\n\
803                             <property name=\"can_focus\">True</property>\n\
804                             <property name=\"receives_default\">True</property>\n\
805                             <property name=\"var_id\">didest.highpass</property>\n\
806                             <property name=\"label_ref\">label4:rack_label</property>\n\
807                           </object>\n\
808                           <packing>\n\
809                             <property name=\"expand\">False</property>\n\
810                             <property name=\"fill\">False</property>\n\
811                             <property name=\"position\">1</property>\n\
812                           </packing>\n\
813                         </child>\n\
814                       </object>\n\
815                       <packing>\n\
816                         <property name=\"expand\">True</property>\n\
817                         <property name=\"fill\">True</property>\n\
818                         <property name=\"position\">2</property>\n\
819                       </packing>\n\
820                     </child>\n\
821                     <child>\n\
822                       <object class=\"GtkBox\" id=\"vbox6\">\n\
823                         <property name=\"visible\">True</property>\n\
824                         <property name=\"can_focus\">False</property>\n\
825                         <property name=\"orientation\">vertical</property>\n\
826                         <child>\n\
827                           <object class=\"GtkLabel\" id=\"label5:rack_label\">\n\
828                             <property name=\"visible\">True</property>\n\
829                             <property name=\"can_focus\">False</property>\n\
830                             <property name=\"label\" translatable=\"yes\">label</property>\n\
831                           </object>\n\
832                           <packing>\n\
833                             <property name=\"expand\">False</property>\n\
834                             <property name=\"fill\">False</property>\n\
835                             <property name=\"position\">0</property>\n\
836                           </packing>\n\
837                         </child>\n\
838                         <child>\n\
839                           <object class=\"GxSmallKnobR\" id=\"GxMidKnob5\">\n\
840                             <property name=\"visible\">True</property>\n\
841                             <property name=\"can_focus\">True</property>\n\
842                             <property name=\"receives_default\">True</property>\n\
843                             <property name=\"var_id\">didest.howpass</property>\n\
844                             <property name=\"label_ref\">label5:rack_label</property>\n\
845                           </object>\n\
846                           <packing>\n\
847                             <property name=\"expand\">False</property>\n\
848                             <property name=\"fill\">False</property>\n\
849                             <property name=\"position\">1</property>\n\
850                           </packing>\n\
851                         </child>\n\
852                       </object>\n\
853                       <packing>\n\
854                         <property name=\"expand\">True</property>\n\
855                         <property name=\"fill\">True</property>\n\
856                         <property name=\"position\">3</property>\n\
857                       </packing>\n\
858                     </child>\n\
859                   </object>\n\
860                   <packing>\n\
861                     <property name=\"expand\">True</property>\n\
862                     <property name=\"fill\">True</property>\n\
863                     <property name=\"position\">0</property>\n\
864                   </packing>\n\
865                 </child>\n\
866                 <child>\n\
867                   <object class=\"GtkGrid\" id=\"table1\">\n\
868                     <property name=\"visible\">True</property>\n\
869                     <property name=\"can_focus\">False</property>\n\
870                     <property name=\"margin_left\">8</property>\n\
871                     <property name=\"margin_right\">8</property>\n\
872                     <property name=\"row_spacing\">3</property>\n\
873                     <property name=\"column_spacing\">6</property>\n\
874                     <child>\n\
875                       <object class=\"GxSelector\" id=\"gxselector2\">\n\
876                         <property name=\"visible\">True</property>\n\
877                         <property name=\"can_focus\">True</property>\n\
878                         <property name=\"receives_default\">True</property>\n\
879                         <property name=\"hexpand\">True</property>\n\
880                         <property name=\"var_id\">didest.mode</property>\n\
881                         <property name=\"label_ref\">label21:rack_label_inverse</property>\n\
882                       </object>\n\
883                       <packing>\n\
884                         <property name=\"left_attach\">1</property>\n\
885                         <property name=\"top_attach\">1</property>\n\
886                       </packing>\n\
887                     </child>\n\
888                     <child>\n\
889                       <object class=\"GtkLabel\" id=\"label11:rack_label_inverse\">\n\
890                         <property name=\"visible\">True</property>\n\
891                         <property name=\"can_focus\">False</property>\n\
892                         <property name=\"label\" translatable=\"yes\">label</property>\n\
893                         <property name=\"xalign\">1</property>\n\
894                       </object>\n\
895                       <packing>\n\
896                         <property name=\"left_attach\">0</property>\n\
897                         <property name=\"top_attach\">0</property>\n\
898                       </packing>\n\
899                     </child>\n\
900                     <child>\n\
901                       <object class=\"GtkLabel\" id=\"label21:rack_label_inverse\">\n\
902                         <property name=\"visible\">True</property>\n\
903                         <property name=\"can_focus\">False</property>\n\
904                         <property name=\"label\" translatable=\"yes\">label</property>\n\
905                         <property name=\"xalign\">1</property>\n\
906                       </object>\n\
907                       <packing>\n\
908                         <property name=\"left_attach\">0</property>\n\
909                         <property name=\"top_attach\">1</property>\n\
910                       </packing>\n\
911                     </child>\n\
912                     <child>\n\
913                       <object class=\"GxSelector\" id=\"gxselector1\">\n\
914                         <property name=\"visible\">True</property>\n\
915                         <property name=\"can_focus\">True</property>\n\
916                         <property name=\"receives_default\">True</property>\n\
917                         <property name=\"hexpand\">True</property>\n\
918                         <property name=\"var_id\">didest.notes</property>\n\
919                         <property name=\"label_ref\">label11:rack_label_inverse</property>\n\
920                       </object>\n\
921                       <packing>\n\
922                         <property name=\"left_attach\">1</property>\n\
923                         <property name=\"top_attach\">0</property>\n\
924                         <property name=\"width\">3</property>\n\
925                       </packing>\n\
926                     </child>\n\
927                     <child>\n\
928                       <object class=\"GtkLabel\" id=\"label31:rack_label_inverse\">\n\
929                         <property name=\"visible\">True</property>\n\
930                         <property name=\"can_focus\">False</property>\n\
931                         <property name=\"label\" translatable=\"yes\">label</property>\n\
932                         <property name=\"xalign\">1</property>\n\
933                       </object>\n\
934                       <packing>\n\
935                         <property name=\"left_attach\">2</property>\n\
936                         <property name=\"top_attach\">1</property>\n\
937                       </packing>\n\
938                     </child>\n\
939                     <child>\n\
940                       <object class=\"GxSwitch\" id=\"gxswitch1\">\n\
941                         <property name=\"visible\">True</property>\n\
942                         <property name=\"can_focus\">True</property>\n\
943                         <property name=\"receives_default\">True</property>\n\
944                         <property name=\"use_stock\">True</property>\n\
945                         <property name=\"draw_indicator\">True</property>\n\
946                         <property name=\"var_id\">didest.Freeze</property>\n\
947                         <property name=\"base_name\">frbutton</property>\n\
948                         <property name=\"label_ref\">label31:rack_label_inverse</property>\n\
949                       </object>\n\
950                       <packing>\n\
951                         <property name=\"left_attach\">3</property>\n\
952                         <property name=\"top_attach\">1</property>\n\
953                       </packing>\n\
954                     </child>\n\
955                   </object>\n\
956                   <packing>\n\
957                     <property name=\"expand\">False</property>\n\
958                     <property name=\"fill\">False</property>\n\
959                     <property name=\"position\">1</property>\n\
960                   </packing>\n\
961                 </child>\n\
962               </object>\n\
963               <packing>\n\
964                 <property name=\"expand\">True</property>\n\
965                 <property name=\"fill\">True</property>\n\
966                 <property name=\"position\">1</property>\n\
967               </packing>\n\
968             </child>\n\
969             <child>\n\
970               <object class=\"GtkBox\" id=\"vbox7\">\n\
971                 <property name=\"visible\">True</property>\n\
972                 <property name=\"can_focus\">False</property>\n\
973                 <property name=\"orientation\">vertical</property>\n\
974                 <child>\n\
975                   <object class=\"GtkLabel\" id=\"label6:rack_label1\">\n\
976                     <property name=\"visible\">True</property>\n\
977                     <property name=\"can_focus\">False</property>\n\
978                   </object>\n\
979                   <packing>\n\
980                     <property name=\"expand\">False</property>\n\
981                     <property name=\"fill\">False</property>\n\
982                     <property name=\"position\">0</property>\n\
983                   </packing>\n\
984                 </child>\n\
985                 <child>\n\
986                   <object class=\"GtkLabel\" id=\"label6:rack_label\">\n\
987                     <property name=\"visible\">True</property>\n\
988                     <property name=\"can_focus\">False</property>\n\
989                     <property name=\"label\" translatable=\"yes\">label</property>\n\
990                   </object>\n\
991                   <packing>\n\
992                     <property name=\"expand\">False</property>\n\
993                     <property name=\"fill\">False</property>\n\
994                     <property name=\"position\">1</property>\n\
995                   </packing>\n\
996                 </child>\n\
997                 <child>\n\
998                   <object class=\"GxMidKnob\" id=\"GxMidKnob6\">\n\
999                     <property name=\"visible\">True</property>\n\
1000                     <property name=\"can_focus\">True</property>\n\
1001                     <property name=\"receives_default\">True</property>\n\
1002                     <property name=\"var_id\">didest.gain</property>\n\
1003                     <property name=\"label_ref\">label6:rack_label</property>\n\
1004                   </object>\n\
1005                   <packing>\n\
1006                     <property name=\"expand\">True</property>\n\
1007                     <property name=\"fill\">True</property>\n\
1008                     <property name=\"position\">2</property>\n\
1009                   </packing>\n\
1010                 </child>\n\
1011                 <child>\n\
1012                   <object class=\"GtkLabel\" id=\"label6:rack_label2\">\n\
1013                     <property name=\"visible\">True</property>\n\
1014                     <property name=\"can_focus\">False</property>\n\
1015                   </object>\n\
1016                   <packing>\n\
1017                     <property name=\"expand\">False</property>\n\
1018                     <property name=\"fill\">False</property>\n\
1019                     <property name=\"position\">3</property>\n\
1020                   </packing>\n\
1021                 </child>\n\
1022               </object>\n\
1023               <packing>\n\
1024                 <property name=\"expand\">True</property>\n\
1025                 <property name=\"fill\">True</property>\n\
1026                 <property name=\"position\">2</property>\n\
1027               </packing>\n\
1028             </child>\n\
1029           </object>\n\
1030           <packing>\n\
1031             <property name=\"expand\">True</property>\n\
1032             <property name=\"fill\">False</property>\n\
1033             <property name=\"position\">0</property>\n\
1034           </packing>\n\
1035         </child>\n\
1036         <child>\n\
1037           <object class=\"GtkBox\" id=\"minibox\">\n\
1038             <property name=\"visible\">True</property>\n\
1039             <property name=\"can_focus\">False</property>\n\
1040             <property name=\"spacing\">4</property>\n\
1041             <child>\n\
1042               <object class=\"GxHSlider\" id=\"gxhslider1\">\n\
1043                 <property name=\"visible\">True</property>\n\
1044                 <property name=\"can_focus\">True</property>\n\
1045                 <property name=\"receives_default\">True</property>\n\
1046                 <property name=\"round_digits\">0</property>\n\
1047                 <property name=\"var_id\">didest.gain</property>\n\
1048                 <property name=\"show_value\">False</property>\n\
1049                 <property name=\"value_position\">right</property>\n\
1050                 <property name=\"value_xalign\">0.52000000000000002</property>\n\
1051                 <property name=\"label_ref\">label0:rack_label</property>\n\
1052               </object>\n\
1053               <packing>\n\
1054                 <property name=\"expand\">False</property>\n\
1055                 <property name=\"fill\">False</property>\n\
1056                 <property name=\"position\">0</property>\n\
1057               </packing>\n\
1058             </child>\n\
1059             <child>\n\
1060               <object class=\"GtkLabel\" id=\"label0:rack_label\">\n\
1061                 <property name=\"visible\">True</property>\n\
1062                 <property name=\"can_focus\">False</property>\n\
1063                 <property name=\"label\" translatable=\"yes\">Amount</property>\n\
1064                 <property name=\"xalign\">0</property>\n\
1065               </object>\n\
1066               <packing>\n\
1067                 <property name=\"expand\">False</property>\n\
1068                 <property name=\"fill\">False</property>\n\
1069                 <property name=\"position\">1</property>\n\
1070               </packing>\n\
1071             </child>\n\
1072           </object>\n\
1073           <packing>\n\
1074             <property name=\"expand\">True</property>\n\
1075             <property name=\"fill\">True</property>\n\
1076             <property name=\"position\">1</property>\n\
1077           </packing>\n\
1078         </child>\n\
1079       </object>\n\
1080     </child>\n\
1081   </object>\n\
1082 </interface>\n\
1083 ";
1084 
load_ui_f(const UiBuilder & b,int form)1085 inline int Dsp::load_ui_f(const UiBuilder& b, int form)
1086 {
1087     if (form & UI_FORM_GLADE) {
1088         b.load_glade(glade_def);
1089         return 0;
1090     }
1091     if (form & UI_FORM_STACK) {
1092 #define PARAM(p) ("didest" "." p)
1093 // -----delay
1094 b.openHorizontalhideBox("");
1095 b.create_master_slider(PARAM("bpm"), _(" delay (bpm)"));
1096 b.closeBox();
1097 b.openVerticalBox("");
1098 {
1099     b.openHorizontalBox("");
1100     {
1101 	b.openVerticalBox("");
1102         {
1103             b.create_selector(PARAM("notes"), "tact");
1104             b.set_next_flags(UI_NUM_SHOW_ALWAYS|UI_NUM_TOP);
1105             b.create_small_rackknob(PARAM("bpm"), _(" delay (bpm)"));
1106         }
1107         b.closeBox();
1108 	b.openVerticalBox("");
1109         {
1110             b.openHorizontalBox("");
1111             b.openFrameBox("");
1112             b.closeBox();
1113             b.create_selector(PARAM("mode"), "mode");
1114             b.closeBox();
1115             b.openHorizontalBox("");
1116             {
1117                 b.set_next_flags(UI_NUM_SHOW_ALWAYS|UI_NUM_TOP);
1118                 b.create_small_rackknob(PARAM("highpass"), _("highpass (hz)"));
1119                 b.set_next_flags(UI_NUM_SHOW_ALWAYS|UI_NUM_TOP);
1120                 b.create_small_rackknob(PARAM("howpass"), _("lowpass (hz)"));
1121             }
1122             b.closeBox();
1123         }
1124         b.closeBox();
1125         b.openVerticalBox("");
1126         {
1127             b.create_small_rackknob(PARAM("level"), _("level"));
1128             b.create_small_rackknob(PARAM("feedback"), _("feedback"));
1129         }
1130         b.closeBox();
1131         b.openVerticalBox("");
1132         {
1133             b.create_small_rackknobr(PARAM("gain"), _("amount"));
1134             b.openFrameBox("");
1135             b.closeBox();
1136             b.create_switch(sw_frbutton,PARAM("Freeze"), _("freeze"));
1137         }
1138         b.closeBox();
1139     }
1140     b.closeBox();
1141 }
1142 b.closeBox();
1143 
1144 #undef PARAM
1145         return 0;
1146     }
1147 	return -1;
1148 }
1149 
load_ui_f_static(const UiBuilder & b,int form)1150 int Dsp::load_ui_f_static(const UiBuilder& b, int form)
1151 {
1152 	return static_cast<Dsp*>(b.plugin)->load_ui_f(b, form);
1153 }
plugin()1154 PluginDef *plugin() {
1155 	return new Dsp();
1156 }
1157 
del_instance(PluginDef * p)1158 void Dsp::del_instance(PluginDef *p)
1159 {
1160 	delete static_cast<Dsp*>(p);
1161 }
1162 
1163 } // end namespace digital_delay_st
1164