1 /*
2 Copyright (C) 2009-2010 Fons Adriaensen <fons@kokkinizita.net>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19
20 //-----------------------------------------------------------------------------------
21 // Common definitions
22 //-----------------------------------------------------------------------------------
23
24
25 #include "ambisonic0.h"
26
27
28 #define NMODS 4
29 #define VERSION "0.8.1"
30
31
32 static const char* maker = "Fons Adriaensen <fons@kokkinizita.net>";
33 static const char* copyr = "GPL";
34
35
pconnect(LADSPA_Handle H,unsigned long port,LADSPA_Data * data)36 static void pconnect (LADSPA_Handle H, unsigned long port, LADSPA_Data *data)
37 {
38 ((LadspaPlugin *)H)->setport (port, data);
39 }
40
activate(LADSPA_Handle H)41 static void activate (LADSPA_Handle H)
42 {
43 ((LadspaPlugin *)H)->active (true);
44 }
45
runplugin(LADSPA_Handle H,unsigned long k)46 static void runplugin (LADSPA_Handle H, unsigned long k)
47 {
48 ((LadspaPlugin *)H)->runproc (k, false);
49 }
50 /*
51 static void runadding (LADSPA_Handle H, unsigned long k)
52 {
53 ((LadspaPlugin *)H)->runproc (k, true);
54 }
55
56 static void setadding (LADSPA_Handle H, LADSPA_Data gain)
57 {
58 ((LadspaPlugin *)H)->setgain (gain);
59 }
60 */
deactivate(LADSPA_Handle H)61 static void deactivate (LADSPA_Handle H)
62 {
63 ((LadspaPlugin *)H)->active (false);
64 }
65
cleanup(LADSPA_Handle H)66 static void cleanup (LADSPA_Handle H)
67 {
68 delete (LadspaPlugin *) H;
69 }
70
71
72 //-----------------------------------------------------------------------------------
73 // Plugin definitions
74 //-----------------------------------------------------------------------------------
75
76
77 static const char* label0 = "Tricardioid-to-AMB";
78 static const char* name0 = "Three cardioids to AMB matrix";
79
80
instant0(const struct _LADSPA_Descriptor * desc,unsigned long rate)81 static LADSPA_Handle instant0 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
82 {
83 return new Ladspa_Tricard2amb (rate);
84 }
85
86
87 static const LADSPA_PortDescriptor pdesc0 [Ladspa_Tricard2amb::NPORT] =
88 {
89 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
90 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
91 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
92 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
93 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
94 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
95 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO
96 };
97
98 static const char * const pname0 [Ladspa_Tricard2amb::NPORT] =
99 {
100 "In-L",
101 "In-R",
102 "In-B",
103 "Out-W",
104 "Out-X",
105 "Out-Y",
106 "Out-Z"
107 };
108
109 static const LADSPA_PortRangeHint phint0 [Ladspa_Tricard2amb::NPORT] =
110 {
111 { 0, 0, 0 },
112 { 0, 0, 0 },
113 { 0, 0, 0 },
114 { 0, 0, 0 },
115 { 0, 0, 0 },
116 { 0, 0, 0 },
117 { 0, 0, 0 }
118 };
119
120
121 //-----------------------------------------------------------------------------------
122
123
124 static const char* label1 = "Virtualmic";
125 static const char* name1 = "Virtual stereo microphone";
126
127
instant1(const struct _LADSPA_Descriptor * desc,unsigned long rate)128 static LADSPA_Handle instant1 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
129 {
130 return new Ladspa_Virtualmic (rate);
131 }
132
133
134 static const LADSPA_PortDescriptor pdesc1 [Ladspa_Virtualmic::NPORT] =
135 {
136 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
137 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
138 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
139 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
140 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
141 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
142 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
143 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
144 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
145 LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL
146 };
147
148 static const char * const pname1 [Ladspa_Virtualmic::NPORT] =
149 {
150 "In-W",
151 "In-X",
152 "In-Y",
153 "In-Z",
154 "Out-L",
155 "Out-R",
156 "Elevation",
157 "Azimuth",
158 "Angle",
159 "Polar"
160 };
161
162 static const LADSPA_PortRangeHint phint1 [Ladspa_Virtualmic::NPORT] =
163 {
164 { 0, 0, 0 },
165 { 0, 0, 0 },
166 { 0, 0, 0 },
167 { 0, 0, 0 },
168 { 0, 0, 0 },
169 { 0, 0, 0 },
170 { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, -90, 90 },
171 { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0, -180, 180 },
172 { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MIDDLE, 0, 180 },
173 { LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_MAXIMUM, 0, 1 }
174 };
175
176
177 //-----------------------------------------------------------------------------------
178
179
180 static const char* label2 = "UHJ-encoder";
181 static const char* name2 = "UHJ Encoder";
182
183
instant2(const struct _LADSPA_Descriptor * desc,unsigned long rate)184 static LADSPA_Handle instant2 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
185 {
186 return new Ladspa_UHJ_encoder (rate);
187 }
188
189
190 static const LADSPA_PortDescriptor pdesc2 [Ladspa_UHJ_encoder::NPORT] =
191 {
192 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
193 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
194 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
195 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
196 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
197 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO
198 };
199
200 static const char * const pname2 [Ladspa_UHJ_encoder::NPORT] =
201 {
202 "In-W",
203 "In-X",
204 "In-Y",
205 "In-Z",
206 "Out-L",
207 "Out-R"
208 };
209
210 static const LADSPA_PortRangeHint phint2 [Ladspa_UHJ_encoder::NPORT] =
211 {
212 { 0, 0, 0 },
213 { 0, 0, 0 },
214 { 0, 0, 0 },
215 { 0, 0, 0 },
216 { 0, 0, 0 },
217 { 0, 0, 0 }
218 };
219
220
221 //-----------------------------------------------------------------------------------
222
223
224 static const char* label3 = "UHJ-decoder";
225 static const char* name3 = "UHJ Decoder";
226
227
instant3(const struct _LADSPA_Descriptor * desc,unsigned long rate)228 static LADSPA_Handle instant3 (const struct _LADSPA_Descriptor *desc, unsigned long rate)
229 {
230 return new Ladspa_UHJ_decoder (rate);
231 }
232
233
234 static const LADSPA_PortDescriptor pdesc3 [Ladspa_UHJ_decoder::NPORT] =
235 {
236 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
237 LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
238 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
239 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
240 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
241 LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO
242 };
243
244 static const char * const pname3 [Ladspa_UHJ_decoder::NPORT] =
245 {
246 "In-L",
247 "In-R",
248 "Out-W",
249 "Out-X",
250 "Out-Y",
251 "Out-Z"
252 };
253
254 static const LADSPA_PortRangeHint phint3 [Ladspa_UHJ_decoder::NPORT] =
255 {
256 { 0, 0, 0 },
257 { 0, 0, 0 },
258 { 0, 0, 0 },
259 { 0, 0, 0 },
260 { 0, 0, 0 },
261 { 0, 0, 0 }
262 };
263
264
265 //-----------------------------------------------------------------------------------
266 // LADSPA dlsym interface
267 //-----------------------------------------------------------------------------------
268
269
270 static const LADSPA_Descriptor moddescr [NMODS] =
271 {
272 {
273 1961,
274 label0,
275 LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
276 name0,
277 maker,
278 copyr,
279 Ladspa_Tricard2amb::NPORT,
280 pdesc0,
281 pname0,
282 phint0,
283 0,
284 instant0,
285 pconnect,
286 activate,
287 runplugin,
288 0,
289 0,
290 deactivate,
291 cleanup
292 },
293 {
294 1962,
295 label1,
296 LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
297 name1,
298 maker,
299 copyr,
300 Ladspa_Virtualmic::NPORT,
301 pdesc1,
302 pname1,
303 phint1,
304 0,
305 instant1,
306 pconnect,
307 activate,
308 runplugin,
309 0,
310 0,
311 deactivate,
312 cleanup
313 },
314 {
315 1957,
316 label2,
317 LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
318 name2,
319 maker,
320 copyr,
321 Ladspa_UHJ_encoder::NPORT,
322 pdesc2,
323 pname2,
324 phint2,
325 0,
326 instant2,
327 pconnect,
328 activate,
329 runplugin,
330 0,
331 0,
332 deactivate,
333 cleanup
334 },
335 {
336 1958,
337 label3,
338 LADSPA_PROPERTY_REALTIME | LADSPA_PROPERTY_HARD_RT_CAPABLE,
339 name3,
340 maker,
341 copyr,
342 Ladspa_UHJ_decoder::NPORT,
343 pdesc3,
344 pname3,
345 phint3,
346 0,
347 instant3,
348 pconnect,
349 activate,
350 runplugin,
351 0,
352 0,
353 deactivate,
354 cleanup
355 }
356 };
357
358
ladspa_descriptor(unsigned long i)359 extern "C" const LADSPA_Descriptor *ladspa_descriptor (unsigned long i)
360 {
361 if (i >= NMODS) return 0;
362 return moddescr + i;
363 }
364
365
366 //-----------------------------------------------------------------------------------
367