1 // generated from file 'faust/slowgear.dsp' by dsp2cc:
2 // Code generated with Faust 0.9.73 (http://faust.grame.fr)
3 
4 
5 namespace slowgear {
6 
7 class Dsp: public PluginLV2 {
8 private:
9 	uint32_t fSamplingFreq;
10 	FAUSTFLOAT 	fslider0;
11 	FAUSTFLOAT	*fslider0_;
12 	double 	fConst0;
13 	FAUSTFLOAT 	fslider1;
14 	FAUSTFLOAT	*fslider1_;
15 	FAUSTFLOAT 	fslider2;
16 	FAUSTFLOAT	*fslider2_;
17 	double 	fRec0[2];
18 	int 	iRec1[2];
19 	double 	fRec2[2];
20 	double 	faRec0[2];
21 	void connect(uint32_t port,void* data);
22 	void clear_state_f();
23 	void init(uint32_t samplingFreq);
24 	void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0);
25 
26 	static void clear_state_f_static(PluginLV2*);
27 	static void init_static(uint32_t samplingFreq, PluginLV2*);
28 	static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2*);
29 	static void del_instance(PluginLV2 *p);
30 	static void connect_static(uint32_t port,void* data, PluginLV2 *p);
31 public:
32 	Dsp();
33 	~Dsp();
34 };
35 
36 
37 
Dsp()38 Dsp::Dsp()
39 	: PluginLV2() {
40 	version = PLUGINLV2_VERSION;
41 	id = "slowgear";
42 	name = N_("slowgear");
43 	mono_audio = compute_static;
44 	stereo_audio = 0;
45 	set_samplerate = init_static;
46 	activate_plugin = 0;
47 	connect_ports = connect_static;
48 	clear_state = clear_state_f_static;
49 	delete_instance = del_instance;
50 }
51 
~Dsp()52 Dsp::~Dsp() {
53 }
54 
clear_state_f()55 inline void Dsp::clear_state_f()
56 {
57 	for (int i=0; i<2; i++) fRec0[i] = 0;
58 	for (int i=0; i<2; i++) iRec1[i] = 0;
59 	for (int i=0; i<2; i++) fRec2[i] = 0;
60 	for (int i=0; i<2; i++) faRec0[i] = 0;
61 }
62 
clear_state_f_static(PluginLV2 * p)63 void Dsp::clear_state_f_static(PluginLV2 *p)
64 {
65 	static_cast<Dsp*>(p)->clear_state_f();
66 }
67 
init(uint32_t samplingFreq)68 inline void Dsp::init(uint32_t samplingFreq)
69 {
70 	fSamplingFreq = samplingFreq;
71 	fConst0 = (1e+05 / double(min(192000, max(1, fSamplingFreq))));
72 	clear_state_f();
73 }
74 
init_static(uint32_t samplingFreq,PluginLV2 * p)75 void Dsp::init_static(uint32_t samplingFreq, PluginLV2 *p)
76 {
77 	static_cast<Dsp*>(p)->init(samplingFreq);
78 }
79 
compute(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0)80 void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0)
81 {
82 #define fslider0 (*fslider0_)
83 #define fslider1 (*fslider1_)
84 #define fslider2 (*fslider2_)
85 	double 	fSlow0 = (0.01 * (fConst0 / double(fslider0)));
86 	double 	fSlow1 = (0.01 * (0 - (fConst0 / double(fslider1))));
87 	double 	fSlow2 = (0.01 * double(fslider2));
88 	for (int i=0; i<count; i++) {
89 		double fTemp0 = (double)input0[i];
90 		double fTemp1 = fabs(fTemp0);
91 		int iTemp2 = int((iRec1[1] < 8));
92 		fRec0[0] = ((iTemp2)?max(fRec0[1], fTemp1):fTemp1);
93 		iRec1[0] = ((iTemp2)?(1 + iRec1[1]):1);
94 		fRec2[0] = ((iTemp2)?fRec2[1]:fRec0[1]);
95 		((int((fRec2[0] > fSlow2)))?faRec0[0] = min((double)1, ((faRec0[1]) + fSlow0)): faRec0[0] = max((double)0, ((faRec0[1]) + fSlow1)));
96 		output0[i] = (FAUSTFLOAT)(fTemp0 * faRec0[0]);
97 		// post processing
98 		fRec2[1] = fRec2[0];
99 		iRec1[1] = iRec1[0];
100 		fRec0[1] = fRec0[0];
101 		faRec0[1] = faRec0[0];
102 	}
103 #undef fslider0
104 #undef fslider1
105 #undef fslider2
106 }
107 
compute_static(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0,PluginLV2 * p)108 void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2 *p)
109 {
110 	static_cast<Dsp*>(p)->compute(count, input0, output0);
111 }
112 
113 
connect(uint32_t port,void * data)114 void Dsp::connect(uint32_t port,void* data)
115 {
116 	switch ((PortIndex)port)
117 	{
118 	case DOWNTIME:
119 		fslider1_ = (float*)data; // , 5.0, 0.0, 1e+03, 0.01
120 		break;
121 	case TRESHOLD:
122 		fslider2_ = (float*)data; // , 1.0, 0.0, 1e+01, 0.01
123 		break;
124 	case UPTIME:
125 		fslider0_ = (float*)data; // , 1e+02, 0.0, 1e+03, 0.01
126 		break;
127 	default:
128 		break;
129 	}
130 }
131 
connect_static(uint32_t port,void * data,PluginLV2 * p)132 void Dsp::connect_static(uint32_t port,void* data, PluginLV2 *p)
133 {
134 	static_cast<Dsp*>(p)->connect(port, data);
135 }
136 
137 
plugin()138 PluginLV2 *plugin() {
139 	return new Dsp();
140 }
141 
del_instance(PluginLV2 * p)142 void Dsp::del_instance(PluginLV2 *p)
143 {
144 	delete static_cast<Dsp*>(p);
145 }
146 
147 /*
148 typedef enum
149 {
150    DOWNTIME,
151    TRESHOLD,
152    UPTIME,
153 } PortIndex;
154 */
155 
156 } // end namespace slowgear
157