martin@12
|
1 #ifndef __ClassicAmbiDec__
|
martin@12
|
2 #include "ClassicAmbiDec.h"
|
martin@12
|
3 #endif
|
martin@12
|
4 //C++ Headers
|
martin@12
|
5 #include <stdio.h>
|
martin@12
|
6 #include <string.h>
|
martin@12
|
7 #include <cmath>
|
martin@12
|
8
|
martin@12
|
9 //GUI Headers
|
martin@12
|
10 #include "aeffguieditor.h"
|
martin@12
|
11
|
martin@12
|
12
|
martin@12
|
13 //-----------------------------------------------------------------------------
|
martin@12
|
14 ClassicAmbiDecProgram::ClassicAmbiDecProgram()
|
martin@12
|
15 {
|
martin@12
|
16
|
martin@12
|
17 }
|
martin@12
|
18
|
martin@12
|
19
|
martin@12
|
20
|
martin@12
|
21 //-----------------------------------------------------------------------------
|
martin@12
|
22 ClassicAmbiDec::ClassicAmbiDec (audioMasterCallback audioMaster)
|
martin@12
|
23 : AudioEffectX (audioMaster, kNumPrograms, kNumParameters)
|
martin@12
|
24 {
|
martin@12
|
25
|
martin@12
|
26
|
martin@12
|
27 //Set the number of input and output channels
|
martin@12
|
28 setNumInputs (4); // 4 Channel Classic B-Format Input
|
martin@12
|
29 setNumOutputs (MAX_CHANNELS); // MAX_CHANNELS 5.1 Output
|
martin@12
|
30
|
martin@12
|
31 //Initially set the number of inputs and outputs incase (set|get)SpeakerArrangement isn't called
|
martin@12
|
32 numberInputs=4;
|
martin@12
|
33 numberOutputs=MAX_CHANNELS;
|
martin@12
|
34 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
35 myInputArrangement->type = kSpeakerArr31Cine;
|
martin@12
|
36
|
martin@12
|
37 setUniqueID ('MMca');
|
martin@12
|
38 canDoubleReplacing(); //Plugin can use process double replacing
|
martin@12
|
39 canProcessReplacing(); //Plugin can use process replacing
|
martin@12
|
40 noTail ();
|
martin@12
|
41
|
martin@12
|
42 bool bit64 = setProcessPrecision(kVstProcessPrecision64);
|
martin@12
|
43 if (bit64==true) {
|
martin@12
|
44 bits=64;
|
martin@12
|
45 }
|
martin@12
|
46 else{
|
martin@12
|
47 bits=32;
|
martin@12
|
48 }
|
martin@12
|
49
|
martin@12
|
50
|
martin@12
|
51 // Declare any variables to their default values
|
martin@12
|
52 fMode = 0.f;
|
martin@12
|
53 fWidth = 0.5f;
|
martin@12
|
54 fPattern = 0.5f;
|
martin@12
|
55 fRotate = 0.5f;
|
martin@12
|
56 fTilt = 0.5f;
|
martin@12
|
57 fTumble = 0.5f;
|
martin@12
|
58 fZoom = 0.5f;
|
martin@12
|
59 fZoomMethod = 0.f;
|
martin@12
|
60 fRearVerb = 0.f;
|
martin@12
|
61 fHiVerb = 0.f;
|
martin@12
|
62 fCentrePattern =0.5f;
|
martin@12
|
63 fCentreGain = 0.75f;
|
martin@12
|
64 fSubGain = 0.75f;
|
martin@12
|
65 fFc = 5.0f/11.0f;
|
martin@12
|
66 fSurroundMode = 0.f;
|
martin@12
|
67 fSurroundPattern = 0.5;
|
martin@12
|
68 fSurroundWidth = 2.f/3.f;
|
martin@12
|
69 fSurroundGain = 0.75f;
|
martin@12
|
70 fDecoderMode = 0.f;
|
martin@12
|
71 fChannelOrder = 1.f;
|
martin@12
|
72
|
martin@12
|
73 myDecoder.Fs = sampleRate;
|
martin@12
|
74 myDecoder.filterCoefs();
|
martin@12
|
75
|
martin@12
|
76
|
martin@12
|
77 programs_20 = new ClassicAmbiDecProgram[kNumParameters];
|
martin@12
|
78 programs_21 = new ClassicAmbiDecProgram[kNumParameters];
|
martin@12
|
79 programs_40 = new ClassicAmbiDecProgram[kNumParameters];
|
martin@12
|
80 programs_50 = new ClassicAmbiDecProgram[kNumParameters];
|
martin@12
|
81 programs_51 = new ClassicAmbiDecProgram[kNumParameters];
|
martin@12
|
82
|
martin@12
|
83 //Initailise all the programs
|
martin@12
|
84 //Stereo Mode
|
martin@12
|
85 //Name
|
martin@12
|
86 vst_strncpy (programs_20[0].name, "Stereo XY Microphones",kVstMaxProgNameLen);
|
martin@12
|
87 vst_strncpy (programs_20[1].name, "Stereo MS Microphones",kVstMaxProgNameLen);
|
martin@12
|
88 vst_strncpy (programs_20[2].name, "Stereo Blumlein Fig8s",kVstMaxProgNameLen);
|
martin@12
|
89 vst_strncpy (programs_20[3].name, "Stereo XY with 'Verb",kVstMaxProgNameLen);
|
martin@12
|
90 vst_strncpy (programs_20[4].name, "Stereo MS with 'Verb",kVstMaxProgNameLen);
|
martin@12
|
91 //Mode
|
martin@12
|
92 programs_20[0].mode = 0.f;
|
martin@12
|
93 programs_20[1].mode = 1.f;
|
martin@12
|
94 programs_20[2].mode = 0.f;
|
martin@12
|
95 programs_20[3].mode = 0.f;
|
martin@12
|
96 programs_20[4].mode = 1.f;
|
martin@12
|
97 //Width
|
martin@12
|
98 programs_20[0].width = (1.f/3.f);
|
martin@12
|
99 programs_20[1].width = (1.f/3.f);
|
martin@12
|
100 programs_20[2].width = 0.5f;
|
martin@12
|
101 programs_20[3].width = (1.f/3.f);
|
martin@12
|
102 programs_20[4].width = (1.f/3.f);
|
martin@12
|
103 //Pattern
|
martin@12
|
104 programs_20[0].pattern = 0.5f;
|
martin@12
|
105 programs_20[1].pattern = 0.5f;
|
martin@12
|
106 programs_20[2].pattern = 0.f;
|
martin@12
|
107 programs_20[3].pattern = 0.5f;
|
martin@12
|
108 programs_20[4].pattern = 0.5f;
|
martin@12
|
109 //RearVerb
|
martin@12
|
110 programs_20[0].rearVerb = 0.f;
|
martin@12
|
111 programs_20[1].rearVerb = 0.f;
|
martin@12
|
112 programs_20[2].rearVerb = 0.f;
|
martin@12
|
113 programs_20[3].rearVerb = 0.75f;
|
martin@12
|
114 programs_20[4].rearVerb = 0.75f;
|
martin@12
|
115 //HiVerb
|
martin@12
|
116 programs_20[0].hiVerb = 0.f;
|
martin@12
|
117 programs_20[1].hiVerb = 0.f;
|
martin@12
|
118 programs_20[2].hiVerb = 0.f;
|
martin@12
|
119 programs_20[3].hiVerb = 0.25f;
|
martin@12
|
120 programs_20[4].hiVerb = 0.25f;
|
martin@12
|
121
|
martin@12
|
122
|
martin@12
|
123 //2.1 Mode
|
martin@12
|
124 //Name
|
martin@12
|
125 vst_strncpy (programs_21[0].name, "2.1 XY Microphones",kVstMaxProgNameLen);
|
martin@12
|
126 vst_strncpy (programs_21[1].name, "2.1 MS Microphones",kVstMaxProgNameLen);
|
martin@12
|
127 vst_strncpy (programs_21[2].name, "2.1 Blumlein Fig8s",kVstMaxProgNameLen);
|
martin@12
|
128 vst_strncpy (programs_21[3].name, "2.1 XY with 'Verb",kVstMaxProgNameLen);
|
martin@12
|
129 vst_strncpy (programs_21[4].name, "2.1 MS with 'Verb",kVstMaxProgNameLen);
|
martin@12
|
130 //Mode
|
martin@12
|
131 programs_21[0].mode = 0.f;
|
martin@12
|
132 programs_21[1].mode = 1.f;
|
martin@12
|
133 programs_21[2].mode = 0.f;
|
martin@12
|
134 programs_21[3].mode = 0.f;
|
martin@12
|
135 programs_21[4].mode = 1.f;
|
martin@12
|
136 //Width
|
martin@12
|
137 programs_21[0].width = (1.f/3.f);
|
martin@12
|
138 programs_21[1].width = (1.f/3.f);
|
martin@12
|
139 programs_21[2].width = 0.5f;
|
martin@12
|
140 programs_21[3].width = (1.f/3.f);
|
martin@12
|
141 programs_21[4].width = (1.f/3.f);
|
martin@12
|
142 //Pattern
|
martin@12
|
143 programs_21[0].pattern = 0.5f;
|
martin@12
|
144 programs_21[1].pattern = 0.5f;
|
martin@12
|
145 programs_21[2].pattern = 0.f;
|
martin@12
|
146 programs_21[3].pattern = 0.5f;
|
martin@12
|
147 programs_21[4].pattern = 0.5f;
|
martin@12
|
148 //RearVerb
|
martin@12
|
149 programs_21[0].rearVerb = 0.f;
|
martin@12
|
150 programs_21[1].rearVerb = 0.f;
|
martin@12
|
151 programs_21[2].rearVerb = 0.f;
|
martin@12
|
152 programs_21[3].rearVerb = 0.75f;
|
martin@12
|
153 programs_21[4].rearVerb = 0.75f;
|
martin@12
|
154 //HiVerb
|
martin@12
|
155 programs_21[0].hiVerb = 0.f;
|
martin@12
|
156 programs_21[1].hiVerb = 0.f;
|
martin@12
|
157 programs_21[2].hiVerb = 0.f;
|
martin@12
|
158 programs_21[3].hiVerb = 0.25f;
|
martin@12
|
159 programs_21[4].hiVerb = 0.25f;
|
martin@12
|
160 //SubGain
|
martin@12
|
161 programs_21[0].subGain = 0.75f;
|
martin@12
|
162 programs_21[1].subGain = 0.75f;
|
martin@12
|
163 programs_21[2].subGain = 0.75f;
|
martin@12
|
164 programs_21[3].subGain = 0.75f;
|
martin@12
|
165 programs_21[4].subGain = 0.75f;
|
martin@12
|
166 //FC
|
martin@12
|
167 programs_21[0].fc = 5.0f/11.0f;
|
martin@12
|
168 programs_21[1].fc = 5.0f/11.0f;
|
martin@12
|
169 programs_21[2].fc = 5.0f/11.0f;
|
martin@12
|
170 programs_21[3].fc = 5.0f/11.0f;
|
martin@12
|
171 programs_21[4].fc = 5.0f/11.0f;
|
martin@12
|
172
|
martin@12
|
173
|
martin@12
|
174
|
martin@12
|
175 //Quad Mode
|
martin@12
|
176 //Name
|
martin@12
|
177 vst_strncpy (programs_40[0].name, "Quad XY Microphones",kVstMaxProgNameLen);
|
martin@12
|
178 vst_strncpy (programs_40[1].name, "Quad MS Microphones",kVstMaxProgNameLen);
|
martin@12
|
179 vst_strncpy (programs_40[2].name, "Quad Blumlein Fig8s",kVstMaxProgNameLen);
|
martin@12
|
180 vst_strncpy (programs_40[3].name, "Quad XY with MS",kVstMaxProgNameLen);
|
martin@12
|
181 vst_strncpy (programs_40[4].name, "Quad MS with XY",kVstMaxProgNameLen);
|
martin@12
|
182 //Mode
|
martin@12
|
183 programs_40[0].mode = 0.f;
|
martin@12
|
184 programs_40[1].mode = 1.f;
|
martin@12
|
185 programs_40[2].mode = 0.f;
|
martin@12
|
186 programs_40[3].mode = 0.f;
|
martin@12
|
187 programs_40[4].mode = 1.f;
|
martin@12
|
188 //Width
|
martin@12
|
189 programs_40[0].width = (1.f/3.f);
|
martin@12
|
190 programs_40[1].width = (1.f/3.f);
|
martin@12
|
191 programs_40[2].width = 0.5f;
|
martin@12
|
192 programs_40[3].width = (1.f/3.f);
|
martin@12
|
193 programs_40[4].width = (1.f/3.f);
|
martin@12
|
194 //Pattern
|
martin@12
|
195 programs_40[0].pattern = 0.5f;
|
martin@12
|
196 programs_40[1].pattern = 0.5f;
|
martin@12
|
197 programs_40[2].pattern = 0.f;
|
martin@12
|
198 programs_40[3].pattern = 0.5f;
|
martin@12
|
199 programs_40[4].pattern = 0.5f;
|
martin@12
|
200 //Surround Mode
|
martin@12
|
201 programs_40[0].surroundMode = 0.f;
|
martin@12
|
202 programs_40[1].surroundMode = 1.f;
|
martin@12
|
203 programs_40[2].surroundMode = 0.f;
|
martin@12
|
204 programs_40[3].surroundMode = 1.f;
|
martin@12
|
205 programs_40[4].surroundMode = 0.f;
|
martin@12
|
206 //Surround Width
|
martin@12
|
207 programs_40[0].surroundWidth = (5.5f/9.f);
|
martin@12
|
208 programs_40[1].surroundWidth = (5.5f/9.f);
|
martin@12
|
209 programs_40[2].surroundWidth = 0.5f;
|
martin@12
|
210 programs_40[3].surroundWidth = (5.5f/9.f);
|
martin@12
|
211 programs_40[4].surroundWidth = (5.5f/9.f);
|
martin@12
|
212 //Surround Pattern
|
martin@12
|
213 programs_40[0].surroundPattern = 0.5;
|
martin@12
|
214 programs_40[1].surroundPattern = 0.5;
|
martin@12
|
215 programs_40[2].surroundPattern = 0.0;
|
martin@12
|
216 programs_40[0].surroundPattern = 0.25;
|
martin@12
|
217 programs_40[0].surroundPattern = 0.75;
|
martin@12
|
218 //Surround Gain
|
martin@12
|
219 programs_40[0].surroundGain = 0.75f;
|
martin@12
|
220 programs_40[1].surroundGain = 0.75f;
|
martin@12
|
221 programs_40[2].surroundGain = 0.75f;
|
martin@12
|
222 programs_40[3].surroundGain = 0.75f;
|
martin@12
|
223 programs_40[4].surroundGain = 0.75f;
|
martin@12
|
224
|
martin@12
|
225
|
martin@12
|
226 //5.0 Mode
|
martin@12
|
227 //Name
|
martin@12
|
228 vst_strncpy (programs_50[0].name, "5.0 XY Microphones",kVstMaxProgNameLen);
|
martin@12
|
229 vst_strncpy (programs_50[1].name, "5.0 MS Microphones",kVstMaxProgNameLen);
|
martin@12
|
230 vst_strncpy (programs_50[2].name, "5.0 Blumlein Fig8s",kVstMaxProgNameLen);
|
martin@12
|
231 vst_strncpy (programs_50[3].name, "5.0 Heller et. al. 1",kVstMaxProgNameLen);
|
martin@12
|
232 vst_strncpy (programs_50[4].name, "5.0 Heller et. al. 2",kVstMaxProgNameLen);
|
martin@12
|
233 //Mode
|
martin@12
|
234 programs_50[0].mode = 0.f;
|
martin@12
|
235 programs_50[1].mode = 1.f;
|
martin@12
|
236 programs_50[2].mode = 0.f;
|
martin@12
|
237 //Width
|
martin@12
|
238 programs_50[0].width = (1.f/3.f);
|
martin@12
|
239 programs_50[1].width = (1.f/3.f);
|
martin@12
|
240 programs_50[2].width = 0.5f;
|
martin@12
|
241 //Pattern
|
martin@12
|
242 programs_50[0].pattern = 0.5f;
|
martin@12
|
243 programs_50[1].pattern = 0.5f;
|
martin@12
|
244 programs_50[2].pattern = 0.f;
|
martin@12
|
245 //Centre Pattern
|
martin@12
|
246 programs_50[0].centrePattern = 0.5f;
|
martin@12
|
247 programs_50[1].centrePattern = 0.5f;
|
martin@12
|
248 programs_50[2].centrePattern = 0.0f;
|
martin@12
|
249 //Centre Gain
|
martin@12
|
250 programs_50[0].centreGain = 0.75f;
|
martin@12
|
251 programs_50[1].centreGain = 0.75f;
|
martin@12
|
252 programs_50[2].centreGain = 0.75f;
|
martin@12
|
253 //Surround Mode
|
martin@12
|
254 programs_50[0].surroundMode = 0.f;
|
martin@12
|
255 programs_50[1].surroundMode = 1.f;
|
martin@12
|
256 programs_50[2].surroundMode = 0.f;
|
martin@12
|
257 //Surround Width
|
martin@12
|
258 programs_50[0].surroundWidth = (5.5f/9.f);
|
martin@12
|
259 programs_50[1].surroundWidth = (5.5f/9.f);
|
martin@12
|
260 programs_50[2].surroundWidth = 0.5f;
|
martin@12
|
261 //Surround Pattern
|
martin@12
|
262 programs_50[0].surroundPattern = 0.5;
|
martin@12
|
263 programs_50[1].surroundPattern = 0.5;
|
martin@12
|
264 programs_50[2].surroundPattern = 0.0;
|
martin@12
|
265 //Surround Gain
|
martin@12
|
266 programs_50[0].surroundGain = 0.75f;
|
martin@12
|
267 programs_50[1].surroundGain = 0.75f;
|
martin@12
|
268 programs_50[2].surroundGain = 0.75f;
|
martin@12
|
269
|
martin@12
|
270
|
martin@12
|
271 //5.1 Mode
|
martin@12
|
272 //Name
|
martin@12
|
273 vst_strncpy (programs_51[0].name, "5.1 XY Microphones",kVstMaxProgNameLen);
|
martin@12
|
274 vst_strncpy (programs_51[1].name, "5.1 MS Microphones",kVstMaxProgNameLen);
|
martin@12
|
275 vst_strncpy (programs_51[2].name, "5.1 Blumlein Fig8s",kVstMaxProgNameLen);
|
martin@12
|
276 vst_strncpy (programs_51[3].name, "5.1 Heller et. al. 1",kVstMaxProgNameLen);
|
martin@12
|
277 vst_strncpy (programs_51[4].name, "5.1 Heller et. al. 2",kVstMaxProgNameLen);
|
martin@12
|
278 //Mode
|
martin@12
|
279 programs_51[0].mode = 0.f;
|
martin@12
|
280 programs_51[1].mode = 1.f;
|
martin@12
|
281 programs_51[2].mode = 0.f;
|
martin@12
|
282 //Width
|
martin@12
|
283 programs_51[0].width = (1.f/3.f);
|
martin@12
|
284 programs_51[1].width = (1.f/3.f);
|
martin@12
|
285 programs_51[2].width = 0.5f;
|
martin@12
|
286 //Pattern
|
martin@12
|
287 programs_51[0].pattern = 0.5f;
|
martin@12
|
288 programs_51[1].pattern = 0.5f;
|
martin@12
|
289 programs_51[2].pattern = 0.f;
|
martin@12
|
290 //Centre Pattern
|
martin@12
|
291 programs_51[0].centrePattern = 0.5f;
|
martin@12
|
292 programs_51[1].centrePattern = 0.5f;
|
martin@12
|
293 programs_51[2].centrePattern = 0.0f;
|
martin@12
|
294 //Centre Gain
|
martin@12
|
295 programs_51[0].centreGain = 0.75f;
|
martin@12
|
296 programs_51[1].centreGain = 0.75f;
|
martin@12
|
297 programs_51[2].centreGain = 0.75f;
|
martin@12
|
298 //SubGain
|
martin@12
|
299 programs_51[0].subGain = 0.75f;
|
martin@12
|
300 programs_51[1].subGain = 0.75f;
|
martin@12
|
301 programs_51[2].subGain = 0.75f;
|
martin@12
|
302 programs_51[3].subGain = 0.75f;
|
martin@12
|
303 programs_51[4].subGain = 0.75f;
|
martin@12
|
304 //FC
|
martin@12
|
305 programs_51[0].fc = 5.0f/11.0f;
|
martin@12
|
306 programs_51[1].fc = 5.0f/11.0f;
|
martin@12
|
307 programs_51[2].fc = 5.0f/11.0f;
|
martin@12
|
308 programs_51[3].fc = 5.0f/11.0f;
|
martin@12
|
309 programs_51[4].fc = 5.0f/11.0f;
|
martin@12
|
310 //Surround Mode
|
martin@12
|
311 programs_51[0].surroundMode = 0.f;
|
martin@12
|
312 programs_51[1].surroundMode = 1.f;
|
martin@12
|
313 programs_51[2].surroundMode = 0.f;
|
martin@12
|
314 //Surround Width
|
martin@12
|
315 programs_51[0].surroundWidth = (5.5f/9.f);
|
martin@12
|
316 programs_51[1].surroundWidth = (5.5f/9.f);
|
martin@12
|
317 programs_51[2].surroundWidth = 0.5f;
|
martin@12
|
318 //Surround Pattern
|
martin@12
|
319 programs_51[0].surroundPattern = 0.5;
|
martin@12
|
320 programs_51[1].surroundPattern = 0.5;
|
martin@12
|
321 programs_51[2].surroundPattern = 0.0;
|
martin@12
|
322 //Surround Gain
|
martin@12
|
323 programs_51[0].surroundGain = 0.75f;
|
martin@12
|
324 programs_51[1].surroundGain = 0.75f;
|
martin@12
|
325 programs_51[2].surroundGain = 0.75f;
|
martin@12
|
326
|
martin@12
|
327
|
martin@12
|
328 //Load GUI
|
martin@12
|
329 extern AEffGUIEditor* createEditor (AudioEffectX*);
|
martin@12
|
330 setEditor (createEditor (this));
|
martin@12
|
331
|
martin@12
|
332 resume (); // flush buffer
|
martin@12
|
333
|
martin@12
|
334 //Load Program0 default
|
martin@12
|
335 if (programs_20||programs_21||programs_40||programs_50||programs_51) {
|
martin@12
|
336 setProgram(0);
|
martin@12
|
337 }
|
martin@12
|
338 }
|
martin@12
|
339
|
martin@12
|
340
|
martin@12
|
341 void ClassicAmbiDec::suspend()
|
martin@12
|
342 {
|
martin@12
|
343 myDecoder.clearFilter();
|
martin@12
|
344
|
martin@12
|
345 if (editor){
|
martin@12
|
346 ((AEffGUIEditor*)editor)->setParameter (100, 0);
|
martin@12
|
347 }
|
martin@12
|
348 }
|
martin@12
|
349
|
martin@12
|
350 void ClassicAmbiDec::close()
|
martin@12
|
351 {
|
martin@12
|
352 }
|
martin@12
|
353
|
martin@12
|
354
|
martin@12
|
355 void ClassicAmbiDec::open()
|
martin@12
|
356 {
|
martin@12
|
357 }
|
martin@12
|
358
|
martin@12
|
359
|
martin@12
|
360
|
martin@12
|
361
|
martin@12
|
362
|
martin@12
|
363 //------------------------------------------------------------------------
|
martin@12
|
364 bool ClassicAmbiDec::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
|
martin@12
|
365 VstSpeakerArrangement* pluginOutput)
|
martin@12
|
366 {
|
martin@12
|
367 numberInputs = pluginInput->numChannels;
|
martin@12
|
368 numberOutputs = pluginOutput->numChannels;
|
martin@12
|
369
|
martin@12
|
370
|
martin@12
|
371 bool result;//What to return, true for acceptable speaker arrangement
|
martin@12
|
372
|
martin@12
|
373 switch (pluginOutput->type) {
|
martin@12
|
374 case kSpeakerArr51://5.1 Output
|
martin@12
|
375 {
|
martin@12
|
376 if (pluginInput->type==kSpeakerArr31Cine) {
|
martin@12
|
377 result = true;
|
martin@12
|
378 }
|
martin@12
|
379 else {
|
martin@12
|
380 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
381 myInputArrangement->type = kSpeakerArr31Cine;
|
martin@12
|
382 result = false;
|
martin@12
|
383 }
|
martin@12
|
384 break;
|
martin@12
|
385 }
|
martin@12
|
386
|
martin@12
|
387 case kSpeakerArr50://NOT WORKING AS INTENDED
|
martin@12
|
388 {
|
martin@12
|
389 if (pluginInput->numChannels==4) {
|
martin@12
|
390 result = true;
|
martin@12
|
391 }
|
martin@12
|
392 else {
|
martin@12
|
393 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
394 myInputArrangement->type = kSpeakerArr31Cine;
|
martin@12
|
395 result = false;
|
martin@12
|
396 }
|
martin@12
|
397 break;
|
martin@12
|
398 }
|
martin@12
|
399
|
martin@12
|
400 case kSpeakerArr40Cine://4.0 Output (LRCS)
|
martin@12
|
401 {
|
martin@12
|
402 if (pluginInput->type==kSpeakerArr40Cine) {
|
martin@12
|
403 result = true;
|
martin@12
|
404 }
|
martin@12
|
405 else {
|
martin@12
|
406 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
407 myInputArrangement->type = kSpeakerArr40Cine;
|
martin@12
|
408 result = false;
|
martin@12
|
409 }
|
martin@12
|
410 break;
|
martin@12
|
411 }
|
martin@12
|
412
|
martin@12
|
413 case kSpeakerArr40Music://4.0 Output (Music)
|
martin@12
|
414 {
|
martin@12
|
415 if (pluginInput->type==kSpeakerArr40Music) {
|
martin@12
|
416 result = true;
|
martin@12
|
417 }
|
martin@12
|
418 else {
|
martin@12
|
419 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
420 myInputArrangement->type = kSpeakerArr40Music;
|
martin@12
|
421 result = false;
|
martin@12
|
422 }
|
martin@12
|
423 break;
|
martin@12
|
424 }
|
martin@12
|
425
|
martin@12
|
426 case kSpeakerArrStereo://Stereo
|
martin@12
|
427 {
|
martin@12
|
428 if (pluginInput->type==kSpeakerArr40Music) {
|
martin@12
|
429 result = true;
|
martin@12
|
430 }
|
martin@12
|
431 else {
|
martin@12
|
432 result = false;
|
martin@12
|
433 }
|
martin@12
|
434 break;
|
martin@12
|
435 }
|
martin@12
|
436
|
martin@12
|
437
|
martin@12
|
438 default:
|
martin@12
|
439 {
|
martin@12
|
440 if (pluginInput->type==kSpeakerArr31Cine) {
|
martin@12
|
441 result = true;
|
martin@12
|
442 }
|
martin@12
|
443 else {
|
martin@12
|
444 allocateArrangement (&myInputArrangement, 4);
|
martin@12
|
445 myInputArrangement->type = kSpeakerArr31Cine;
|
martin@12
|
446 result = false;
|
martin@12
|
447 }
|
martin@12
|
448 break;
|
martin@12
|
449 }
|
martin@12
|
450 }
|
martin@12
|
451
|
martin@12
|
452 return result;
|
martin@12
|
453 }
|
martin@12
|
454
|
martin@12
|
455
|
martin@12
|
456 //------------------------------------------------------------------------
|
martin@12
|
457 bool ClassicAmbiDec::getSpeakerArrangement(VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput)
|
martin@12
|
458 {
|
martin@12
|
459 *pluginInput = myInputArrangement;
|
martin@12
|
460 return true;
|
martin@12
|
461 }
|
martin@12
|
462
|
martin@12
|
463
|
martin@12
|
464
|
martin@12
|
465 //------------------------------------------------------------------------
|
martin@12
|
466 VstInt32 ClassicAmbiDec::getVstVersion()
|
martin@12
|
467 {
|
martin@12
|
468 return kVstVersion;
|
martin@12
|
469 }
|
martin@12
|
470
|
martin@12
|
471
|
martin@12
|
472 //------------------------------------------------------------------------
|
martin@12
|
473 ClassicAmbiDec::~ClassicAmbiDec () //clears protected variables
|
martin@12
|
474 {
|
martin@12
|
475 deallocateArrangement (&myInputArrangement);
|
martin@12
|
476
|
martin@12
|
477 if (programs_20)
|
martin@12
|
478 delete[] programs_20;
|
martin@12
|
479 if (programs_21)
|
martin@12
|
480 delete[] programs_21;
|
martin@12
|
481 if (programs_40)
|
martin@12
|
482 delete[] programs_40;
|
martin@12
|
483 if (programs_50)
|
martin@12
|
484 delete[] programs_50;
|
martin@12
|
485 if (programs_51)
|
martin@12
|
486 delete[] programs_51;
|
martin@12
|
487 }
|
martin@12
|
488
|
martin@12
|
489
|
martin@12
|
490 //------------------------------------------------------------------------
|
martin@12
|
491 void ClassicAmbiDec::resume () //Do this on a resume from the host
|
martin@12
|
492 {
|
martin@12
|
493 AudioEffectX::resume ();
|
martin@12
|
494 if (editor){
|
martin@12
|
495 ((AEffGUIEditor*)editor)->setParameter (101, 0);
|
martin@12
|
496 }
|
martin@12
|
497 }
|
martin@12
|
498
|
martin@12
|
499
|
martin@12
|
500 //------------------------------------------------------------------------
|
martin@12
|
501 bool ClassicAmbiDec::getProgramNameIndexed(VstInt32 category, VstInt32 index, char *text)
|
martin@12
|
502 {
|
martin@12
|
503 switch (myDecoder.decoderMode) {
|
martin@12
|
504 case 2:
|
martin@12
|
505 strcpy(text, programs_20[index].name);
|
martin@12
|
506 break;
|
martin@12
|
507 case 3:
|
martin@12
|
508 strcpy(text, programs_21[index].name);
|
martin@12
|
509 break;
|
martin@12
|
510 case 4:
|
martin@12
|
511 strcpy(text, programs_40[index].name);
|
martin@12
|
512 break;
|
martin@12
|
513 case 5:
|
martin@12
|
514 strcpy(text, programs_50[index].name);
|
martin@12
|
515 break;
|
martin@12
|
516 case 6:
|
martin@12
|
517 strcpy(text, programs_51[index].name);
|
martin@12
|
518 break;
|
martin@12
|
519
|
martin@12
|
520 default:
|
martin@12
|
521 break;
|
martin@12
|
522 }
|
martin@12
|
523
|
martin@12
|
524 return true;
|
martin@12
|
525 }
|
martin@12
|
526
|
martin@12
|
527
|
martin@12
|
528 //------------------------------------------------------------------------
|
martin@12
|
529 void ClassicAmbiDec::setProgram(VstInt32 program)
|
martin@12
|
530 {
|
martin@12
|
531 ClassicAmbiDecProgram* curProg;
|
martin@12
|
532 curProgram = program;
|
martin@12
|
533
|
martin@12
|
534 switch (myDecoder.decoderMode) {
|
martin@12
|
535 case 2:
|
martin@12
|
536 curProg = &programs_20[program];
|
martin@12
|
537 setParameter(kMode, curProg->mode);
|
martin@12
|
538 setParameter(kWidth, curProg->width);
|
martin@12
|
539 setParameter(kPattern, curProg->pattern);
|
martin@12
|
540 setParameter(kRearVerb, curProg->rearVerb);
|
martin@12
|
541 setParameter(kHiVerb, curProg->hiVerb);
|
martin@12
|
542 break;
|
martin@12
|
543
|
martin@12
|
544 case 3:
|
martin@12
|
545 curProg = &programs_21[program];
|
martin@12
|
546 setParameter(kMode, curProg->mode);
|
martin@12
|
547 setParameter(kWidth, curProg->width);
|
martin@12
|
548 setParameter(kPattern, curProg->pattern);
|
martin@12
|
549 setParameter(kRearVerb, curProg->rearVerb);
|
martin@12
|
550 setParameter(kHiVerb, curProg->hiVerb);
|
martin@12
|
551 setParameter(kSubGain, curProg->subGain);
|
martin@12
|
552 setParameter(kFc, curProg->fc);
|
martin@12
|
553 break;
|
martin@12
|
554
|
martin@12
|
555 case 4:
|
martin@12
|
556 curProg = &programs_40[program];
|
martin@12
|
557 setParameter(kMode, curProg->mode);
|
martin@12
|
558 setParameter(kWidth, curProg->width);
|
martin@12
|
559 setParameter(kPattern, curProg->pattern);
|
martin@12
|
560 setParameter(kSurroundMode, curProg->surroundMode);
|
martin@12
|
561 setParameter(kSurroundWidth, curProg->surroundWidth);
|
martin@12
|
562 setParameter(kSurroundPattern, curProg->surroundPattern);
|
martin@12
|
563 setParameter(kSurroundGain, curProg->surroundGain);
|
martin@12
|
564 break;
|
martin@12
|
565
|
martin@12
|
566 case 5:
|
martin@12
|
567 curProg = &programs_50[program];
|
martin@12
|
568 if (program<3) {
|
martin@12
|
569 myDecoder.mode5x=0;
|
martin@12
|
570 setParameter(kMode, curProg->mode);
|
martin@12
|
571 setParameter(kWidth, curProg->width);
|
martin@12
|
572 setParameter(kPattern, curProg->pattern);
|
martin@12
|
573 setParameter(kCentrePattern, curProg->centrePattern);
|
martin@12
|
574 setParameter(kCentreGain, curProg->centreGain);
|
martin@12
|
575 setParameter(kSurroundMode, curProg->surroundMode);
|
martin@12
|
576 setParameter(kSurroundWidth, curProg->surroundWidth);
|
martin@12
|
577 setParameter(kSurroundPattern, curProg->surroundPattern);
|
martin@12
|
578 setParameter(kSurroundGain, curProg->surroundGain);
|
martin@12
|
579 if (editor){
|
martin@12
|
580 ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
|
martin@12
|
581 }
|
martin@12
|
582 }
|
martin@12
|
583 else if (program==3) {
|
martin@12
|
584 myDecoder.mode5x=1;
|
martin@12
|
585 if (editor){
|
martin@12
|
586 ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
|
martin@12
|
587 }
|
martin@12
|
588 }
|
martin@12
|
589 else if (program==4) {
|
martin@12
|
590 myDecoder.mode5x=2;
|
martin@12
|
591 if (editor){
|
martin@12
|
592 ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
|
martin@12
|
593 }
|
martin@12
|
594 }
|
martin@12
|
595 break;
|
martin@12
|
596 case 6:
|
martin@12
|
597 curProg = &programs_51[program];
|
martin@12
|
598 if (program<3) {
|
martin@12
|
599 myDecoder.mode5x=0;
|
martin@12
|
600 setParameter(kMode, curProg->mode);
|
martin@12
|
601 setParameter(kWidth, curProg->width);
|
martin@12
|
602 setParameter(kPattern, curProg->pattern);
|
martin@12
|
603 setParameter(kCentrePattern, curProg->centrePattern);
|
martin@12
|
604 setParameter(kCentreGain, curProg->centreGain);
|
martin@12
|
605 setParameter(kSubGain, curProg->subGain);
|
martin@12
|
606 setParameter(kFc, curProg->fc);
|
martin@12
|
607 setParameter(kSurroundMode, curProg->surroundMode);
|
martin@12
|
608 setParameter(kSurroundWidth, curProg->surroundWidth);
|
martin@12
|
609 setParameter(kSurroundPattern, curProg->surroundPattern);
|
martin@12
|
610 setParameter(kSurroundGain, curProg->surroundGain);
|
martin@12
|
611
|
martin@12
|
612 if (editor){
|
martin@12
|
613 ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
|
martin@12
|
614 }
|
martin@12
|
615 }
|
martin@12
|
616 else if (program==3) {
|
martin@12
|
617 //Only set the sub
|
martin@12
|
618 setParameter(kSubGain, curProg->subGain);
|
martin@12
|
619 setParameter(kFc, curProg->fc);
|
martin@12
|
620 myDecoder.mode5x=1;
|
martin@12
|
621 if (editor){
|
martin@12
|
622 ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
|
martin@12
|
623 }
|
martin@12
|
624 }
|
martin@12
|
625 else if (program==4) {
|
martin@12
|
626 //Only set the sub
|
martin@12
|
627 setParameter(kSubGain, curProg->subGain);
|
martin@12
|
628 setParameter(kFc, curProg->fc);
|
martin@12
|
629 myDecoder.mode5x=2;
|
martin@12
|
630 if (editor){
|
martin@12
|
631 ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
|
martin@12
|
632 }
|
martin@12
|
633 }
|
martin@12
|
634 break;
|
martin@12
|
635
|
martin@12
|
636 default:
|
martin@12
|
637 curProg = &programs_20[program];
|
martin@12
|
638 break;
|
martin@12
|
639 }
|
martin@12
|
640 }
|
martin@12
|
641
|
martin@12
|
642
|
martin@12
|
643
|
martin@12
|
644 //------------------------------------------------------------------------
|
martin@12
|
645 void ClassicAmbiDec::setProgramName (char *name)
|
martin@12
|
646 {
|
martin@12
|
647 switch (myDecoder.decoderMode) {
|
martin@12
|
648 case 2:
|
martin@12
|
649 strcpy (programs_20[curProgram].name, name);
|
martin@12
|
650 break;
|
martin@12
|
651 case 3:
|
martin@12
|
652 strcpy (programs_21[curProgram].name, name);
|
martin@12
|
653 break;
|
martin@12
|
654 case 4:
|
martin@12
|
655 strcpy (programs_40[curProgram].name, name);
|
martin@12
|
656 break;
|
martin@12
|
657 case 5:
|
martin@12
|
658 strcpy (programs_50[curProgram].name, name);
|
martin@12
|
659 break;
|
martin@12
|
660 case 6:
|
martin@12
|
661 strcpy (programs_51[curProgram].name, name);
|
martin@12
|
662 break;
|
martin@12
|
663
|
martin@12
|
664 default:
|
martin@12
|
665 break;
|
martin@12
|
666 }
|
martin@12
|
667 }
|
martin@12
|
668
|
martin@12
|
669 //------------------------------------------------------------------------
|
martin@12
|
670 void ClassicAmbiDec::getProgramName (char *name)
|
martin@12
|
671 {
|
martin@12
|
672 switch (myDecoder.decoderMode) {
|
martin@12
|
673 case 2:
|
martin@12
|
674 strcpy (name, programs_20[curProgram].name);
|
martin@12
|
675 break;
|
martin@12
|
676 case 3:
|
martin@12
|
677 strcpy (name, programs_21[curProgram].name);
|
martin@12
|
678 break;
|
martin@12
|
679 case 4:
|
martin@12
|
680 strcpy (name, programs_40[curProgram].name);
|
martin@12
|
681 break;
|
martin@12
|
682 case 5:
|
martin@12
|
683 strcpy (name, programs_50[curProgram].name);
|
martin@12
|
684 break;
|
martin@12
|
685 case 6:
|
martin@12
|
686 strcpy (name, programs_51[curProgram].name);
|
martin@12
|
687 break;
|
martin@12
|
688
|
martin@12
|
689 default:
|
martin@12
|
690 break;
|
martin@12
|
691 }
|
martin@12
|
692 }
|
martin@12
|
693
|
martin@12
|
694
|
martin@12
|
695
|
martin@12
|
696
|
martin@12
|
697 //------------------------------------------------------------------------
|
martin@12
|
698 //VstInt32 ClassicAmbiDec::getProgram()
|
martin@12
|
699 //{
|
martin@12
|
700 // return curProgram;
|
martin@12
|
701 //}
|
martin@12
|
702
|
martin@12
|
703
|
martin@12
|
704
|
martin@12
|
705
|
martin@12
|
706
|
martin@12
|
707 //------------------------------------------------------------------------
|
martin@12
|
708 void ClassicAmbiDec::setParameter (VstInt32 index, float value) // SET Parameter value from host
|
martin@12
|
709 {
|
martin@12
|
710 ClassicAmbiDecProgram* curProg;
|
martin@12
|
711 switch (myDecoder.decoderMode) {
|
martin@12
|
712 case 2:
|
martin@12
|
713 curProg = &programs_20[curProgram];
|
martin@12
|
714 break;
|
martin@12
|
715 case 3:
|
martin@12
|
716 curProg = &programs_21[curProgram];
|
martin@12
|
717 break;
|
martin@12
|
718 case 4:
|
martin@12
|
719 curProg = &programs_40[curProgram];
|
martin@12
|
720 break;
|
martin@12
|
721 case 5:
|
martin@12
|
722 curProg = &programs_50[curProgram];
|
martin@12
|
723 break;
|
martin@12
|
724 case 6:
|
martin@12
|
725 curProg = &programs_51[curProgram];
|
martin@12
|
726 break;
|
martin@12
|
727
|
martin@12
|
728 default:
|
martin@12
|
729 curProg = &programs_20[curProgram];
|
martin@12
|
730 break;
|
martin@12
|
731 }
|
martin@12
|
732
|
martin@12
|
733
|
martin@12
|
734 switch (index)
|
martin@12
|
735 {
|
martin@12
|
736 case kMode :
|
martin@12
|
737 fMode = curProg->mode = value;
|
martin@12
|
738 if (value<=0.5f) {
|
martin@12
|
739 myDecoder.Mode = 0;
|
martin@12
|
740 }
|
martin@12
|
741 else {
|
martin@12
|
742 myDecoder.Mode = 1;
|
martin@12
|
743 }
|
martin@12
|
744 break;
|
martin@12
|
745 case kWidth:
|
martin@12
|
746 fWidth = curProg->width = value;
|
martin@12
|
747 myDecoder.Width = (double)value*90;
|
martin@12
|
748 break;
|
martin@12
|
749 case kPattern:
|
martin@12
|
750 fPattern = curProg->pattern = value;
|
martin@12
|
751 myDecoder.Pattern = (double)value;
|
martin@12
|
752 break;
|
martin@12
|
753 case kRotate :
|
martin@12
|
754 fRotate = value;
|
martin@12
|
755 if (value==0.5f) {
|
martin@12
|
756 myDecoder.Rotate=0.0;
|
martin@12
|
757 }
|
martin@12
|
758 else {
|
martin@12
|
759 myDecoder.Rotate = (double)value*-360+180;
|
martin@12
|
760 }
|
martin@12
|
761 break;
|
martin@12
|
762 case kTilt:
|
martin@12
|
763 fTilt = value;
|
martin@12
|
764 if (value==0.5f) {
|
martin@12
|
765 myDecoder.Tilt=0.0;
|
martin@12
|
766 }
|
martin@12
|
767 else {
|
martin@12
|
768 myDecoder.Tilt = (double)value*-360+180;
|
martin@12
|
769 }
|
martin@12
|
770 break;
|
martin@12
|
771 case kTumble:
|
martin@12
|
772 fTumble = value;
|
martin@12
|
773 if (value==0.5f) {
|
martin@12
|
774 myDecoder.Tumble=0.00;
|
martin@12
|
775 }
|
martin@12
|
776 else {
|
martin@12
|
777 myDecoder.Tumble = (double)value*-360+180;
|
martin@12
|
778 }
|
martin@12
|
779 break;
|
martin@12
|
780 case kZoom:
|
martin@12
|
781 fZoom = value;
|
martin@12
|
782 myDecoder.Zoom = (double)value*200-100;
|
martin@12
|
783 break;
|
martin@12
|
784 case kZoomMethod:
|
martin@12
|
785 fZoomMethod = value;
|
martin@12
|
786 if (value<=0.2f) {
|
martin@12
|
787 myDecoder.ZoomMethod = 0;
|
martin@12
|
788 }
|
martin@12
|
789 else if (value>0.2f && value<=0.5f) {
|
martin@12
|
790 myDecoder.ZoomMethod = 1;
|
martin@12
|
791 }
|
martin@12
|
792 else if (value>0.5f && value<=0.8f) {
|
martin@12
|
793 myDecoder.ZoomMethod = 2;
|
martin@12
|
794 }
|
martin@12
|
795 else if (value>0.8f && value<=1.f) {
|
martin@12
|
796 myDecoder.ZoomMethod = 3;
|
martin@12
|
797 }
|
martin@12
|
798
|
martin@12
|
799 break;
|
martin@12
|
800 case kRearVerb :
|
martin@12
|
801 fRearVerb = curProg->rearVerb = value;
|
martin@12
|
802 if (value==0.0f) {
|
martin@12
|
803 myDecoder.RearVerb=-100;
|
martin@12
|
804 }
|
martin@12
|
805 else {
|
martin@12
|
806 myDecoder.RearVerb = -36+(double)value*36;
|
martin@12
|
807 }
|
martin@12
|
808 break;
|
martin@12
|
809 case kHiVerb :
|
martin@12
|
810 fHiVerb = curProg->hiVerb = value;
|
martin@12
|
811 if (value==0.0f) {
|
martin@12
|
812 myDecoder.HiVerb=-100;
|
martin@12
|
813 }
|
martin@12
|
814 else {
|
martin@12
|
815 myDecoder.HiVerb= -36+(double)value*36;
|
martin@12
|
816 }
|
martin@12
|
817 break;
|
martin@12
|
818 case kCentrePattern:
|
martin@12
|
819 fCentrePattern = curProg->centrePattern = value;
|
martin@12
|
820 myDecoder.centrePattern = (double)value;
|
martin@12
|
821 break;
|
martin@12
|
822 case kCentreGain:
|
martin@12
|
823 fCentreGain = curProg->centreGain = value;
|
martin@12
|
824 myDecoder.centreGain = ((double)value*24-18);
|
martin@12
|
825 break;
|
martin@12
|
826 case kSubGain:
|
martin@12
|
827 fSubGain = curProg->subGain = value;
|
martin@12
|
828 myDecoder.subGain = ((double)value*24-18);
|
martin@12
|
829 break;
|
martin@12
|
830 case kFc:
|
martin@12
|
831 fFc = curProg->fc = value;
|
martin@12
|
832 myDecoder.Fc = (int)((value*220)+20);
|
martin@12
|
833 myDecoder.filterCoefs();
|
martin@12
|
834 break;
|
martin@12
|
835 case kSurroundMode:
|
martin@12
|
836 fSurroundMode = curProg->surroundMode = value;
|
martin@12
|
837 if (value<=0.5f) {
|
martin@12
|
838 myDecoder.surMode = 0;
|
martin@12
|
839 }
|
martin@12
|
840 else {
|
martin@12
|
841 myDecoder.surMode = 1;
|
martin@12
|
842 }
|
martin@12
|
843 break;
|
martin@12
|
844 case kSurroundPattern:
|
martin@12
|
845 fSurroundPattern = curProg->surroundPattern = value;
|
martin@12
|
846 myDecoder.surPattern = (double)value;
|
martin@12
|
847 break;
|
martin@12
|
848 case kSurroundWidth:
|
martin@12
|
849 fSurroundWidth = curProg->surroundWidth = value;
|
martin@12
|
850 myDecoder.surWidth = (double)value*90;
|
martin@12
|
851 break;
|
martin@12
|
852 case kSurroundGain:
|
martin@12
|
853 fSurroundGain = curProg->surroundGain = value;
|
martin@12
|
854 myDecoder.surGain = ((double)value*24-18);
|
martin@12
|
855 break;
|
martin@12
|
856 case kDecoderMode:
|
martin@12
|
857 fDecoderMode = value;
|
martin@12
|
858
|
martin@12
|
859 if (value<=0.125f) {
|
martin@12
|
860 myDecoder.decoderMode = 2; //Stereo
|
martin@12
|
861 }
|
martin@12
|
862 else if (value>0.125f && value<=0.375f) {
|
martin@12
|
863 myDecoder.decoderMode = 3; //2.1
|
martin@12
|
864 }
|
martin@12
|
865 else if (value>0.375f && value<=0.625f) {
|
martin@12
|
866 myDecoder.decoderMode = 4; //Quad
|
martin@12
|
867 }
|
martin@12
|
868 else if (value>0.625f && value<=0.875f) {
|
martin@12
|
869 myDecoder.decoderMode = 5; //5.0
|
martin@12
|
870 }
|
martin@12
|
871 else if (value>0.875f) {
|
martin@12
|
872 myDecoder.decoderMode = 6; //5.1
|
martin@12
|
873 }
|
martin@12
|
874 updateDisplay();
|
martin@12
|
875 break;
|
martin@12
|
876 case kChannelOrder:
|
martin@12
|
877 fChannelOrder = value;
|
martin@12
|
878 if (value<=0.5f) {
|
martin@12
|
879 myDecoder.channelOrder = 0; //Natural Outputs
|
martin@12
|
880 }
|
martin@12
|
881 else {
|
martin@12
|
882 myDecoder.channelOrder = 1; //5.1 Outputs
|
martin@12
|
883 }
|
martin@12
|
884 break;
|
martin@12
|
885
|
martin@12
|
886 default:
|
martin@12
|
887 break;
|
martin@12
|
888 }
|
martin@12
|
889 if (editor){
|
martin@12
|
890 ((AEffGUIEditor*)editor)->setParameter (index, value);
|
martin@12
|
891 }
|
martin@12
|
892 if (index==kDecoderMode) {
|
martin@12
|
893 setProgram(curProgram);
|
martin@12
|
894 }
|
martin@12
|
895 }
|
martin@12
|
896
|
martin@12
|
897
|
martin@12
|
898 //------------------------------------------------------------------------
|
martin@12
|
899 float ClassicAmbiDec::getParameter (VstInt32 index) // GET the value of the parameter
|
martin@12
|
900 {
|
martin@12
|
901 float returnFloat;
|
martin@12
|
902
|
martin@12
|
903 switch (index)
|
martin@12
|
904 {
|
martin@12
|
905 case kMode :
|
martin@12
|
906 returnFloat = fMode;
|
martin@12
|
907 break;
|
martin@12
|
908 case kWidth:
|
martin@12
|
909 returnFloat = fWidth;
|
martin@12
|
910 break;
|
martin@12
|
911 case kPattern:
|
martin@12
|
912 returnFloat = fPattern;
|
martin@12
|
913 break;
|
martin@12
|
914 case kRotate :
|
martin@12
|
915 returnFloat = fRotate;
|
martin@12
|
916 break;
|
martin@12
|
917 case kTilt:
|
martin@12
|
918 returnFloat = fTilt;
|
martin@12
|
919 break;
|
martin@12
|
920 case kTumble:
|
martin@12
|
921 returnFloat = fTumble;
|
martin@12
|
922 break;
|
martin@12
|
923 case kZoom:
|
martin@12
|
924 returnFloat = fZoom;
|
martin@12
|
925 break;
|
martin@12
|
926 case kZoomMethod:
|
martin@12
|
927 returnFloat = fZoomMethod;
|
martin@12
|
928 break;
|
martin@12
|
929 case kRearVerb :
|
martin@12
|
930 returnFloat = fRearVerb;
|
martin@12
|
931 break;
|
martin@12
|
932 case kHiVerb :
|
martin@12
|
933 returnFloat = fHiVerb;
|
martin@12
|
934 break;
|
martin@12
|
935 case kCentrePattern:
|
martin@12
|
936 returnFloat = fCentrePattern;
|
martin@12
|
937 break;
|
martin@12
|
938 case kCentreGain:
|
martin@12
|
939 returnFloat = fCentreGain;
|
martin@12
|
940 break;
|
martin@12
|
941 case kSubGain:
|
martin@12
|
942 returnFloat = fSubGain;
|
martin@12
|
943 break;
|
martin@12
|
944 case kFc:
|
martin@12
|
945 returnFloat = fFc;
|
martin@12
|
946 break;
|
martin@12
|
947 case kSurroundMode:
|
martin@12
|
948 returnFloat = fSurroundMode;
|
martin@12
|
949 break;
|
martin@12
|
950 case kSurroundPattern:
|
martin@12
|
951 returnFloat = fSurroundPattern;
|
martin@12
|
952 break;
|
martin@12
|
953 case kSurroundWidth:
|
martin@12
|
954 returnFloat = fSurroundWidth;
|
martin@12
|
955 break;
|
martin@12
|
956 case kSurroundGain:
|
martin@12
|
957 returnFloat = fSurroundGain;
|
martin@12
|
958 break;
|
martin@12
|
959 case kDecoderMode:
|
martin@12
|
960 returnFloat = fDecoderMode;
|
martin@12
|
961 break;
|
martin@12
|
962 case kChannelOrder:
|
martin@12
|
963 returnFloat = fChannelOrder;
|
martin@12
|
964 break;
|
martin@12
|
965
|
martin@12
|
966
|
martin@12
|
967 //HIDDEN PArameters for GUI Control
|
martin@12
|
968 case 102: //Bit Mode for GUI display
|
martin@12
|
969 returnFloat = bits;
|
martin@12
|
970 break;
|
martin@12
|
971 case 103:
|
martin@12
|
972 returnFloat = myDecoder.mode5x;
|
martin@12
|
973 break;
|
martin@12
|
974
|
martin@12
|
975 default:
|
martin@12
|
976 break;
|
martin@12
|
977 }
|
martin@12
|
978 return returnFloat; //Returns the chosen Parameters value
|
martin@12
|
979 }
|
martin@12
|
980
|
martin@12
|
981
|
martin@12
|
982 //------------------------------------------------------------------------
|
martin@12
|
983 void ClassicAmbiDec::getParameterName (VstInt32 index, char *label) //SET display value shown for Parameters
|
martin@12
|
984 {
|
martin@12
|
985 switch (index)
|
martin@12
|
986 {
|
martin@12
|
987 case kMode :
|
martin@12
|
988 switch (myDecoder.Mode) {
|
martin@12
|
989 case 0 :
|
martin@12
|
990 strcpy(label, "XY");
|
martin@12
|
991 break;
|
martin@12
|
992 case 1 :
|
martin@12
|
993 strcpy(label, "MS");
|
martin@12
|
994 break;
|
martin@12
|
995 }
|
martin@12
|
996 break;
|
martin@12
|
997 case kWidth:
|
martin@12
|
998 strcpy(label, "Width");
|
martin@12
|
999 break;
|
martin@12
|
1000 case kPattern:
|
martin@12
|
1001 strcpy(label, "Pattern");
|
martin@12
|
1002 break;
|
martin@12
|
1003 case kRotate :
|
martin@12
|
1004 strcpy(label, "Rotate");
|
martin@12
|
1005 break;
|
martin@12
|
1006 case kTilt:
|
martin@12
|
1007 strcpy(label, "Tilt");
|
martin@12
|
1008 break;
|
martin@12
|
1009 case kTumble:
|
martin@12
|
1010 strcpy(label, "Tumble");
|
martin@12
|
1011 break;
|
martin@12
|
1012 case kZoom:
|
martin@12
|
1013 strcpy(label, "Zoom");
|
martin@12
|
1014 break;
|
martin@12
|
1015 case kZoomMethod:
|
martin@12
|
1016 strcpy(label, "Zoom Method");
|
martin@12
|
1017 break;
|
martin@12
|
1018 case kRearVerb :
|
martin@12
|
1019 strcpy(label, "RearVerb");
|
martin@12
|
1020 break;
|
martin@12
|
1021 case kHiVerb :
|
martin@12
|
1022 strcpy(label, "HiVerb");
|
martin@12
|
1023 break;
|
martin@12
|
1024 case kCentrePattern:
|
martin@12
|
1025 strcpy(label, "Ctr. Pattern");
|
martin@12
|
1026 break;
|
martin@12
|
1027 case kCentreGain:
|
martin@12
|
1028 strcpy(label, "Ctr. Gain");
|
martin@12
|
1029 break;
|
martin@12
|
1030 case kSubGain:
|
martin@12
|
1031 strcpy(label, "Sub. Gain");
|
martin@12
|
1032 break;
|
martin@12
|
1033 case kFc:
|
martin@12
|
1034 strcpy(label, "Sub. Xover");
|
martin@12
|
1035 break;
|
martin@12
|
1036 case kSurroundMode:
|
martin@12
|
1037 strcpy(label, "Sur. Mode");
|
martin@12
|
1038 break;
|
martin@12
|
1039 case kSurroundPattern:
|
martin@12
|
1040 strcpy(label, "Sur. Pattern");
|
martin@12
|
1041 break;
|
martin@12
|
1042 case kSurroundWidth:
|
martin@12
|
1043 strcpy(label, "Sur. Width");
|
martin@12
|
1044 break;
|
martin@12
|
1045 case kSurroundGain:
|
martin@12
|
1046 strcpy(label, "Sur. Gain");
|
martin@12
|
1047 break;
|
martin@12
|
1048 case kDecoderMode:
|
martin@12
|
1049 strcpy(label, "Dec. Mode");
|
martin@12
|
1050 break;
|
martin@12
|
1051 case kChannelOrder:
|
martin@12
|
1052 strcpy(label, "Ch. Order");
|
martin@12
|
1053 break;
|
martin@12
|
1054
|
martin@12
|
1055 default:
|
martin@12
|
1056 break;
|
martin@12
|
1057 }
|
martin@12
|
1058 }
|
martin@12
|
1059
|
martin@12
|
1060
|
martin@12
|
1061 //------------------------------------------------------------------------
|
martin@12
|
1062 void ClassicAmbiDec::getParameterDisplay (VstInt32 index, char *text) //GET display value shown for Parameters
|
martin@12
|
1063 {
|
martin@12
|
1064 switch (index)
|
martin@12
|
1065 {
|
martin@12
|
1066 case kMode :
|
martin@12
|
1067 switch (myDecoder.Mode) {
|
martin@12
|
1068 case 0 :
|
martin@12
|
1069 strcpy(text, "XY");
|
martin@12
|
1070 break;
|
martin@12
|
1071 case 1 :
|
martin@12
|
1072 strcpy(text, "MS");
|
martin@12
|
1073 break;
|
martin@12
|
1074 }
|
martin@12
|
1075 break;
|
martin@12
|
1076 case kWidth:
|
martin@12
|
1077 sprintf (text, "%.1f\u00B0", myDecoder.Width);
|
martin@12
|
1078 break;
|
martin@12
|
1079 case kPattern:
|
martin@12
|
1080 if (myDecoder.Pattern<=0.125) {
|
martin@12
|
1081 strcpy(text, "Fig-of-8");
|
martin@12
|
1082 }
|
martin@12
|
1083 else if (myDecoder.Pattern>0.125 && myDecoder.Pattern<=0.375) {
|
martin@12
|
1084 strcpy(text, "Hyper-Card.");
|
martin@12
|
1085 }
|
martin@12
|
1086 else if (myDecoder.Pattern>0.375 && myDecoder.Pattern<=0.625) {
|
martin@12
|
1087 strcpy(text, "Cardioid");
|
martin@12
|
1088 }
|
martin@12
|
1089 else if (myDecoder.Pattern>0.625 && myDecoder.Pattern<=0.875) {
|
martin@12
|
1090 strcpy(text, "Sub-Card.");
|
martin@12
|
1091 }
|
martin@12
|
1092 else {
|
martin@12
|
1093 strcpy(text, "Omni.");
|
martin@12
|
1094 }
|
martin@12
|
1095 break;
|
martin@12
|
1096 case kRotate :
|
martin@12
|
1097 sprintf (text, "%.1f\u00B0", myDecoder.Rotate);
|
martin@12
|
1098 break;
|
martin@12
|
1099 case kTilt:
|
martin@12
|
1100 sprintf (text, "%.1f\u00B0", myDecoder.Tilt);
|
martin@12
|
1101 break;
|
martin@12
|
1102 case kTumble:
|
martin@12
|
1103 sprintf (text, "%.1f\u00B0", myDecoder.Tumble);
|
martin@12
|
1104 break;
|
martin@12
|
1105 case kZoom:
|
martin@12
|
1106 sprintf (text, "%.1f%%", myDecoder.Zoom);
|
martin@12
|
1107 break;
|
martin@12
|
1108 case kZoomMethod:
|
martin@12
|
1109 switch (myDecoder.ZoomMethod) {
|
martin@12
|
1110 case 0:
|
martin@12
|
1111 strcpy(text, "Dominance");
|
martin@12
|
1112 break;
|
martin@12
|
1113 case 1:
|
martin@12
|
1114 strcpy(text, "Press");
|
martin@12
|
1115 break;
|
martin@12
|
1116 case 2:
|
martin@12
|
1117 strcpy(text, "Push");
|
martin@12
|
1118 break;
|
martin@12
|
1119 case 3:
|
martin@12
|
1120 strcpy(text, "Focus");
|
martin@12
|
1121 break;
|
martin@12
|
1122 default:
|
martin@12
|
1123 break;
|
martin@12
|
1124 }
|
martin@12
|
1125 break;
|
martin@12
|
1126 case kRearVerb :
|
martin@12
|
1127 if (myDecoder.RearVerb>-40) {
|
martin@12
|
1128 sprintf (text, "%.2fdB", myDecoder.RearVerb);
|
martin@12
|
1129 }
|
martin@12
|
1130 else {
|
martin@12
|
1131 strcpy(text, "Off");
|
martin@12
|
1132 }
|
martin@12
|
1133 break;
|
martin@12
|
1134 case kHiVerb :
|
martin@12
|
1135 if (myDecoder.HiVerb>-40) {
|
martin@12
|
1136 sprintf (text, "%.2fdB", myDecoder.HiVerb);
|
martin@12
|
1137 }
|
martin@12
|
1138 else {
|
martin@12
|
1139 strcpy(text, "Off");
|
martin@12
|
1140 }
|
martin@12
|
1141 break;
|
martin@12
|
1142 case kCentrePattern:
|
martin@12
|
1143 if (myDecoder.centrePattern<=0.125) {
|
martin@12
|
1144 strcpy(text, "Fig-of-8");
|
martin@12
|
1145 }
|
martin@12
|
1146 else if (myDecoder.centrePattern>0.125 && myDecoder.centrePattern<=0.375) {
|
martin@12
|
1147 strcpy(text, "Hyper-Card.");
|
martin@12
|
1148 }
|
martin@12
|
1149 else if (myDecoder.centrePattern>0.375 && myDecoder.centrePattern<=0.625) {
|
martin@12
|
1150 strcpy(text, "Cardioid");
|
martin@12
|
1151 }
|
martin@12
|
1152 else if (myDecoder.centrePattern>0.625 && myDecoder.centrePattern<=0.875) {
|
martin@12
|
1153 strcpy(text, "Sub-Card.");
|
martin@12
|
1154 }
|
martin@12
|
1155 else {
|
martin@12
|
1156 strcpy(text, "Omni.");
|
martin@12
|
1157 }
|
martin@12
|
1158 break;
|
martin@12
|
1159 case kCentreGain:
|
martin@12
|
1160 sprintf (text, "%.2fdB", myDecoder.centreGain);
|
martin@12
|
1161 break;
|
martin@12
|
1162 case kSubGain:
|
martin@12
|
1163 sprintf (text, "%.2fdB", myDecoder.subGain);
|
martin@12
|
1164 break;
|
martin@12
|
1165 case kFc:
|
martin@12
|
1166 sprintf (text, "%dHz", myDecoder.Fc);
|
martin@12
|
1167 break;
|
martin@12
|
1168 case kSurroundMode:
|
martin@12
|
1169 switch (myDecoder.surMode) {
|
martin@12
|
1170 case 0 :
|
martin@12
|
1171 strcpy(text, "XY");
|
martin@12
|
1172 break;
|
martin@12
|
1173 case 1 :
|
martin@12
|
1174 strcpy(text, "MS");
|
martin@12
|
1175 break;
|
martin@12
|
1176 }
|
martin@12
|
1177 break;
|
martin@12
|
1178 case kSurroundPattern:
|
martin@12
|
1179 if (myDecoder.surPattern<=0.125) {
|
martin@12
|
1180 strcpy(text, "Fig-of-8");
|
martin@12
|
1181 }
|
martin@12
|
1182 else if (myDecoder.surPattern>0.125 && myDecoder.surPattern<=0.375) {
|
martin@12
|
1183 strcpy(text, "Hyper-Card.");
|
martin@12
|
1184 }
|
martin@12
|
1185 else if (myDecoder.surPattern>0.375 && myDecoder.surPattern<=0.625) {
|
martin@12
|
1186 strcpy(text, "Cardioid");
|
martin@12
|
1187 }
|
martin@12
|
1188 else if (myDecoder.surPattern>0.625 && myDecoder.surPattern<=0.875) {
|
martin@12
|
1189 strcpy(text, "Sub-Card.");
|
martin@12
|
1190 }
|
martin@12
|
1191 else {
|
martin@12
|
1192 strcpy(text, "Omni.");
|
martin@12
|
1193 }
|
martin@12
|
1194 break;
|
martin@12
|
1195 case kSurroundWidth:
|
martin@12
|
1196 sprintf (text, "%.1f\u00B0", myDecoder.surWidth);
|
martin@12
|
1197 break;
|
martin@12
|
1198 case kSurroundGain:
|
martin@12
|
1199 sprintf (text, "%.2fdB", myDecoder.surGain);
|
martin@12
|
1200 break;
|
martin@12
|
1201 case kDecoderMode:
|
martin@12
|
1202 switch (myDecoder.decoderMode) {
|
martin@12
|
1203 case 2 :
|
martin@12
|
1204 strcpy(text, "Stereo");
|
martin@12
|
1205 break;
|
martin@12
|
1206 case 3 :
|
martin@12
|
1207 strcpy(text, "2.1");
|
martin@12
|
1208 break;
|
martin@12
|
1209 case 4 :
|
martin@12
|
1210 strcpy(text, "Quad");
|
martin@12
|
1211 break;
|
martin@12
|
1212 case 5 :
|
martin@12
|
1213 strcpy(text, "5.0");
|
martin@12
|
1214 break;
|
martin@12
|
1215 case 6 :
|
martin@12
|
1216 strcpy(text, "5.1");
|
martin@12
|
1217 break;
|
martin@12
|
1218 }
|
martin@12
|
1219 break;
|
martin@12
|
1220 case kChannelOrder:
|
martin@12
|
1221 switch (myDecoder.channelOrder) {
|
martin@12
|
1222 case 0 :
|
martin@12
|
1223 strcpy(text, "Natural");
|
martin@12
|
1224 break;
|
martin@12
|
1225 case 1 :
|
martin@12
|
1226 strcpy(text, "5.1");
|
martin@12
|
1227 break;
|
martin@12
|
1228 }
|
martin@12
|
1229 break;
|
martin@12
|
1230
|
martin@12
|
1231 default:
|
martin@12
|
1232 break;
|
martin@12
|
1233 }
|
martin@12
|
1234 }
|
martin@12
|
1235
|
martin@12
|
1236
|
martin@12
|
1237
|
martin@12
|
1238 //------------------------------------------------------------------------
|
martin@12
|
1239 void ClassicAmbiDec::getParameterLabel (VstInt32 index, char *label) // Labels shown for Parameters
|
martin@12
|
1240 {
|
martin@12
|
1241 switch (index)
|
martin@12
|
1242 {
|
martin@12
|
1243 case kMode :
|
martin@12
|
1244 strcpy(label, "Microphones");
|
martin@12
|
1245 break;
|
martin@12
|
1246 case kWidth:
|
martin@12
|
1247 strcpy(label, "Degrees");
|
martin@12
|
1248 break;
|
martin@12
|
1249 case kPattern:
|
martin@12
|
1250 strcpy(label, "Omni");
|
martin@12
|
1251 break;
|
martin@12
|
1252 case kRotate :
|
martin@12
|
1253 strcpy(label, "Degrees");
|
martin@12
|
1254 break;
|
martin@12
|
1255 case kTilt:
|
martin@12
|
1256 strcpy(label, "Degrees");
|
martin@12
|
1257 break;
|
martin@12
|
1258 case kTumble:
|
martin@12
|
1259 strcpy(label, "Degrees");
|
martin@12
|
1260 break;
|
martin@12
|
1261 case kZoom:
|
martin@12
|
1262 strcpy(label, "Percentage");
|
martin@12
|
1263 break;
|
martin@12
|
1264 case kZoomMethod:
|
martin@12
|
1265 strcpy(label, "Selection");
|
martin@12
|
1266 break;
|
martin@12
|
1267 case kRearVerb :
|
martin@12
|
1268 strcpy(label, "dB");
|
martin@12
|
1269 break;
|
martin@12
|
1270 case kHiVerb :
|
martin@12
|
1271 strcpy(label, "dB");
|
martin@12
|
1272 break;
|
martin@12
|
1273 case kCentrePattern:
|
martin@12
|
1274 strcpy(label, "Omni");
|
martin@12
|
1275 break;
|
martin@12
|
1276 case kCentreGain:
|
martin@12
|
1277 strcpy(label, "dB");
|
martin@12
|
1278 break;
|
martin@12
|
1279 case kSubGain:
|
martin@12
|
1280 strcpy(label, "dB");
|
martin@12
|
1281 break;
|
martin@12
|
1282 case kFc:
|
martin@12
|
1283 strcpy(label, "Hz");
|
martin@12
|
1284 break;
|
martin@12
|
1285 case kSurroundMode:
|
martin@12
|
1286 strcpy(label, "Microphones");
|
martin@12
|
1287 break;
|
martin@12
|
1288 case kSurroundPattern:
|
martin@12
|
1289 strcpy(label, "Omni");
|
martin@12
|
1290 break;
|
martin@12
|
1291 case kSurroundWidth:
|
martin@12
|
1292 strcpy(label, "Degrees");
|
martin@12
|
1293 break;
|
martin@12
|
1294 case kSurroundGain:
|
martin@12
|
1295 strcpy(label, "dB");
|
martin@12
|
1296 break;
|
martin@12
|
1297 case kDecoderMode:
|
martin@12
|
1298 strcpy(label, "Speakers");
|
martin@12
|
1299 break;
|
martin@12
|
1300 case kChannelOrder:
|
martin@12
|
1301 strcpy(label, "Output");
|
martin@12
|
1302 break;
|
martin@12
|
1303 }
|
martin@12
|
1304 }
|
martin@12
|
1305
|
martin@12
|
1306
|
martin@12
|
1307
|
martin@12
|
1308 //------------------------------------------------------------------------
|
martin@12
|
1309 bool ClassicAmbiDec::getEffectName (char* name) // Tha NAME of the effect
|
martin@12
|
1310 {
|
martin@12
|
1311 strcpy (name, "Classic Ambisonics Decoder");
|
martin@12
|
1312 return true;
|
martin@12
|
1313 }
|
martin@12
|
1314
|
martin@12
|
1315
|
martin@12
|
1316
|
martin@12
|
1317 //------------------------------------------------------------------------
|
martin@12
|
1318 bool ClassicAmbiDec::getProductString (char* text) // The PRODUCT name
|
martin@12
|
1319 {
|
martin@12
|
1320 strcpy (text, "Classic Ambisonics Decoder");
|
martin@12
|
1321 return true;
|
martin@12
|
1322 }
|
martin@12
|
1323
|
martin@12
|
1324
|
martin@12
|
1325
|
martin@12
|
1326 //------------------------------------------------------------------------
|
martin@12
|
1327 bool ClassicAmbiDec::getVendorString (char* text) // Vendor (Creator/Publisher)
|
martin@12
|
1328 {
|
martin@12
|
1329 strcpy (text, "Martin J. Morrell");
|
martin@12
|
1330 return true;
|
martin@12
|
1331 }
|
martin@12
|
1332
|
martin@12
|
1333
|
martin@12
|
1334 //------------------------------------------------------------------------
|
martin@12
|
1335 VstInt32 ClassicAmbiDec::getVendorVersion ()
|
martin@12
|
1336 {
|
martin@12
|
1337 return VERSION;
|
martin@12
|
1338 }
|
martin@12
|
1339
|
martin@12
|
1340
|
martin@12
|
1341
|
martin@12
|
1342 //------------------------------------------------------------------------
|
martin@12
|
1343 void ClassicAmbiDec::setSampleRate(float sampleRate)
|
martin@12
|
1344 {
|
martin@12
|
1345 myDecoder.Fs = (int)sampleRate;
|
martin@12
|
1346 myDecoder.filterCoefs();
|
martin@12
|
1347 }
|
martin@12
|
1348
|
martin@12
|
1349
|
martin@12
|
1350
|
martin@12
|
1351 //---------------------------------------------------------------------------
|
martin@12
|
1352 void ClassicAmbiDec::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
|
martin@12
|
1353 {
|
martin@12
|
1354 while (--sampleFrames >= 0) //Do this process if the audio is running
|
martin@12
|
1355 {
|
martin@12
|
1356 //Set the internal B-Format values as doubles.
|
martin@12
|
1357 double w, x, y, z;
|
martin@12
|
1358 switch (numberInputs) {
|
martin@12
|
1359 case 3:
|
martin@12
|
1360 {
|
martin@12
|
1361 w = (double) *inputs[0]++;
|
martin@12
|
1362 x = (double) *inputs[1]++;
|
martin@12
|
1363 y = (double) *inputs[2]++;
|
martin@12
|
1364 z = 0;
|
martin@12
|
1365 break;
|
martin@12
|
1366 }
|
martin@12
|
1367
|
martin@12
|
1368 case 4:
|
martin@12
|
1369 {
|
martin@12
|
1370 w = (double) *inputs[0]++;
|
martin@12
|
1371 x = (double) *inputs[1]++;
|
martin@12
|
1372 y = (double) *inputs[2]++;
|
martin@12
|
1373 z = (double) *inputs[3]++;
|
martin@12
|
1374 break;
|
martin@12
|
1375 }
|
martin@12
|
1376
|
martin@12
|
1377 default:
|
martin@12
|
1378 {
|
martin@12
|
1379 w = 0;
|
martin@12
|
1380 x = 0;
|
martin@12
|
1381 y = 0;
|
martin@12
|
1382 z = 0;
|
martin@12
|
1383 break;
|
martin@12
|
1384 }
|
martin@12
|
1385 }
|
martin@12
|
1386
|
martin@12
|
1387
|
martin@12
|
1388 int numOut;
|
martin@12
|
1389 numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
|
martin@12
|
1390
|
martin@12
|
1391 if (numOut<numberOutputs){ //Zero up extra outputs
|
martin@12
|
1392 for (int i=0; i<numOut; i++)
|
martin@12
|
1393 *outputs[i]++ = float(myDecoder.output[i]);
|
martin@12
|
1394 for (int i=numOut; i<numberOutputs; i++)
|
martin@12
|
1395 *outputs[i]++ = 0.f;
|
martin@12
|
1396 }
|
martin@12
|
1397 else if (numOut==numberOutputs){ //Number of decoder outputs matches channel outputs
|
martin@12
|
1398 for (int i=0; i<numOut; i++)
|
martin@12
|
1399 *outputs[i]++ = float(myDecoder.output[i]);
|
martin@12
|
1400 }
|
martin@12
|
1401 else{ //Only use available outputs
|
martin@12
|
1402 for (int i=0; i<numberOutputs; i++)
|
martin@12
|
1403 *outputs[i]++ = float(myDecoder.output[i]);
|
martin@12
|
1404 }
|
martin@12
|
1405 }
|
martin@12
|
1406 }
|
martin@12
|
1407
|
martin@12
|
1408
|
martin@12
|
1409 //---------------------------------------------------------------------------
|
martin@12
|
1410 void ClassicAmbiDec::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
|
martin@12
|
1411 {
|
martin@12
|
1412 while (--sampleFrames >= 0) //Do this process if the audio is running
|
martin@12
|
1413 {
|
martin@12
|
1414 //Set the internal B-Format values as doubles.
|
martin@12
|
1415 double w, x, y, z;
|
martin@12
|
1416 switch (numberInputs) {
|
martin@12
|
1417 case 3:
|
martin@12
|
1418 {
|
martin@12
|
1419 w = *inputs[0]++;
|
martin@12
|
1420 x = *inputs[1]++;
|
martin@12
|
1421 y = *inputs[2]++;
|
martin@12
|
1422 z = 0;
|
martin@12
|
1423 break;
|
martin@12
|
1424 }
|
martin@12
|
1425
|
martin@12
|
1426 case 4:
|
martin@12
|
1427 {
|
martin@12
|
1428 w = *inputs[0]++;
|
martin@12
|
1429 x = *inputs[1]++;
|
martin@12
|
1430 y = *inputs[2]++;
|
martin@12
|
1431 z = *inputs[3]++;
|
martin@12
|
1432 break;
|
martin@12
|
1433 }
|
martin@12
|
1434
|
martin@12
|
1435 default:
|
martin@12
|
1436 {
|
martin@12
|
1437 w = 0;
|
martin@12
|
1438 x = 0;
|
martin@12
|
1439 y = 0;
|
martin@12
|
1440 z = 0;
|
martin@12
|
1441 break;
|
martin@12
|
1442 }
|
martin@12
|
1443 }
|
martin@12
|
1444
|
martin@12
|
1445
|
martin@12
|
1446 int numOut;
|
martin@12
|
1447 numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
|
martin@12
|
1448
|
martin@12
|
1449 if (numOut<numberOutputs){ //Zero up extra outputs
|
martin@12
|
1450 for (int i=0; i<numOut; i++)
|
martin@12
|
1451 *outputs[i]++ = myDecoder.output[i];
|
martin@12
|
1452 for (int i=numOut; i<numberOutputs; i++)
|
martin@12
|
1453 *outputs[i]++ = 0.0;
|
martin@12
|
1454 }
|
martin@12
|
1455 else if (numOut==numberOutputs){ //Number of decoder outputs matches channel outputs
|
martin@12
|
1456 for (int i=0; i<numOut; i++)
|
martin@12
|
1457 *outputs[i]++ = myDecoder.output[i];
|
martin@12
|
1458 }
|
martin@12
|
1459 else{ //Only use available outputs
|
martin@12
|
1460 for (int i=0; i<numberOutputs; i++)
|
martin@12
|
1461 *outputs[i]++ = myDecoder.output[i];
|
martin@12
|
1462 }
|
martin@12
|
1463 }
|
martin@12
|
1464 } |