1 namespace barkgraphiceq {
2
3 #include "bark_freq_grid.h"
4
5 #include <iostream>
6
7 class Dsp: public PluginLV2 {
8 private:
9 int fSamplingFreq;
10
11 //First elements in both arrays are common gains
12 float* fslider[BARK_NUMBER_OF_BANDS];
13 float* fbargraph[BARK_NUMBER_OF_BANDS];
14 //EQ's, first used for indication, second - for audio signal processing
15 orfanidis_eq::eq1* p_eq1;
16 orfanidis_eq::eq2* p_eq2;
17
18 void connect(uint32_t port,void* data);
19 void clear_state_f();
20 void init(uint32_t samplingFreq);
21 void compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0);
22
23 static void clear_state_f_static(PluginLV2*);
24 static void init_static(uint32_t samplingFreq, PluginLV2*);
25 static void compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2*);
26 static void del_instance(PluginLV2 *p);
27 static void connect_static(uint32_t port,void* data, PluginLV2 *p);
28
29 public:
30 Dsp();
31 ~Dsp();
32 };
33
Dsp()34 Dsp::Dsp()
35 : PluginLV2() {
36
37 version = PLUGINLV2_VERSION;
38 id = "barkgraphiceq";
39 name = N_("Bark Grid EQ");
40 mono_audio = compute_static;
41 stereo_audio = 0;
42 set_samplerate = init_static;
43 activate_plugin = 0;
44 connect_ports = connect_static;
45 clear_state = clear_state_f_static;
46 delete_instance = del_instance;
47
48 p_eq1 = NULL;
49 p_eq2 = NULL;
50
51 clear_state_f();
52
53 }
54
~Dsp()55 Dsp::~Dsp() {
56 }
57
clear_state_f()58 inline void Dsp::clear_state_f()
59 {
60 for(unsigned int i = 0; i < BARK_NUMBER_OF_BANDS; i++)
61 {
62 fslider[i] = 0;
63 fbargraph[i] = 0;
64 }
65 }
66
clear_state_f_static(PluginLV2 * p)67 void Dsp::clear_state_f_static(PluginLV2 *p)
68 {
69 static_cast<Dsp*>(p)->clear_state_f();
70 }
71
init(unsigned int samplingFreq)72 inline void Dsp::init(unsigned int samplingFreq)
73 {
74 fSamplingFreq = samplingFreq;
75
76 orfanidis_eq::freq_grid fg;
77
78 //Apply Bark frequency grid
79 for (unsigned int i = 0; i < BARK_NUMBER_OF_BANDS; i++)
80 fg.add_band(bark_center_freqs[i], bark_bands_widths[i]);
81
82 //Create Butterworth EQ object's
83 p_eq1 = new orfanidis_eq::eq1(fg, orfanidis_eq::butterworth);
84 p_eq2 = new orfanidis_eq::eq2(fg, orfanidis_eq::butterworth);
85
86 clear_state_f();
87 }
88
init_static(unsigned int samplingFreq,PluginLV2 * p)89 void Dsp::init_static(unsigned int samplingFreq, PluginLV2 *p)
90 {
91 static_cast<Dsp*>(p)->init(samplingFreq);
92 }
93
compute(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0)94 void always_inline Dsp::compute(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0)
95 {
96 //Set params
97 for(unsigned int j = 0; j < BARK_NUMBER_OF_BANDS; j++) {
98 p_eq1->change_band_gain_db(j, *fslider[j]);
99 p_eq2->change_band_gain_db(j, *fslider[j]);
100 }
101
102 //Process audio
103 double aver_out = 0;
104 for (int i=0; i<count; i++) {
105 double input = input0[i];
106 double out = 0;
107 p_eq2->sbs_process(&input, &out);
108 output0[i] = out;
109 aver_out += out*out;
110 }
111
112 //Update bars
113 for(unsigned int j = 0; j < BARK_NUMBER_OF_BANDS; j++) {
114 double input = aver_out/count;
115 double band_out = 0;
116 p_eq1->sbs_process_band(j, &input, &band_out);
117 *fbargraph[j] = BARK_NUMBER_OF_BANDS*band_out;
118 }
119 }
120
compute_static(int count,FAUSTFLOAT * input0,FAUSTFLOAT * output0,PluginLV2 * p)121 void __rt_func Dsp::compute_static(int count, FAUSTFLOAT *input0, FAUSTFLOAT *output0, PluginLV2 *p)
122 {
123 static_cast<Dsp*>(p)->compute(count, input0, output0);
124 }
125
connect(uint32_t port,void * data)126 void Dsp::connect(uint32_t port,void* data)
127 {
128 switch ((PortIndex)port)
129 {
130 case G1:
131 fslider[0] = (float*)data;
132 break;
133 case G2:
134 fslider[1] = (float*)data;
135 break;
136 case G3:
137 fslider[2] = (float*)data;
138 break;
139 case G4:
140 fslider[3] = (float*)data;
141 break;
142 case G5:
143 fslider[4] = (float*)data;
144 break;
145 case G6:
146 fslider[5] = (float*)data;
147 break;
148 case G7:
149 fslider[6] = (float*)data;
150 break;
151 case G8:
152 fslider[7] = (float*)data;
153 break;
154 case G9:
155 fslider[8] = (float*)data;
156 break;
157 case G10:
158 fslider[9] = (float*)data;
159 break;
160 case G11:
161 fslider[10] = (float*)data;
162 break;
163 case G12:
164 fslider[11] = (float*)data;
165 break;
166 case G13:
167 fslider[12] = (float*)data;
168 break;
169 case G14:
170 fslider[13] = (float*)data;
171 break;
172 case G15:
173 fslider[14] = (float*)data;
174 break;
175 case G16:
176 fslider[15] = (float*)data;
177 break;
178 case G17:
179 fslider[16] = (float*)data;
180 break;
181 case G18:
182 fslider[17] = (float*)data;
183 break;
184 case G19:
185 fslider[18] = (float*)data;
186 break;
187 case G20:
188 fslider[19] = (float*)data;
189 break;
190 case G21:
191 fslider[20] = (float*)data;
192 break;
193 case G22:
194 fslider[21] = (float*)data;
195 break;
196 case G23:
197 fslider[22] = (float*)data;
198 break;
199 case G24:
200 fslider[23] = (float*)data;
201 break;
202
203 case V1:
204 fbargraph[0] = (float*)data;
205 break;
206 case V2:
207 fbargraph[1] = (float*)data;
208 break;
209 case V3:
210 fbargraph[2] = (float*)data;
211 break;
212 case V4:
213 fbargraph[3] = (float*)data;
214 break;
215 case V5:
216 fbargraph[4] = (float*)data;
217 break;
218 case V6:
219 fbargraph[5] = (float*)data;
220 break;
221 case V7:
222 fbargraph[6] = (float*)data;
223 break;
224 case V8:
225 fbargraph[7] = (float*)data;
226 break;
227 case V9:
228 fbargraph[8] = (float*)data;
229 break;
230 case V10:
231 fbargraph[9] = (float*)data;
232 break;
233 case V11:
234 fbargraph[10] = (float*)data;
235 break;
236 case V12:
237 fbargraph[11] = (float*)data;
238 break;
239 case V13:
240 fbargraph[12] = (float*)data;
241 break;
242 case V14:
243 fbargraph[13] = (float*)data;
244 break;
245 case V15:
246 fbargraph[14] = (float*)data;
247 break;
248 case V16:
249 fbargraph[15] = (float*)data;
250 break;
251 case V17:
252 fbargraph[16] = (float*)data;
253 break;
254 case V18:
255 fbargraph[17] = (float*)data;
256 break;
257 case V19:
258 fbargraph[18] = (float*)data;
259 break;
260 case V20:
261 fbargraph[19] = (float*)data;
262 break;
263 case V21:
264 fbargraph[20] = (float*)data;
265 break;
266 case V22:
267 fbargraph[21] = (float*)data;
268 break;
269 case V23:
270 fbargraph[22] = (float*)data;
271 break;
272 case V24:
273 fbargraph[23] = (float*)data;
274 break;
275
276 default:
277 break;
278 }
279 }
280
connect_static(uint32_t port,void * data,PluginLV2 * p)281 void Dsp::connect_static(uint32_t port,void* data, PluginLV2 *p)
282 {
283 static_cast<Dsp*>(p)->connect(port, data);
284 }
285
plugin()286 PluginLV2 *plugin() {
287 return new Dsp();
288 }
289
del_instance(PluginLV2 * p)290 void Dsp::del_instance(PluginLV2 *p)
291 {
292 //Delete eq's
293 delete static_cast<Dsp*>(p)->p_eq1;
294 delete static_cast<Dsp*>(p)->p_eq2;
295 delete static_cast<Dsp*>(p);
296 }
297
298 } // end namespace barkgraphiceq
299
300