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