126
|
1 #include <stdint.h>
|
|
2 #include <stdbool.h>
|
|
3 #include "snd_masm.h"
|
|
4 #include "pmplay.h"
|
|
5
|
|
6 /* 8bb: This is done in a slightly different way, but the result
|
|
7 ** is the same (bit-accurate to FT2.08/FT2.09 w/ SB16, and WAV-writer).
|
|
8 **
|
|
9 ** Mixer macros are stored in snd_masm.h
|
|
10 */
|
|
11
|
|
12 void PMPMix32Proc(CIType *v, int32_t numSamples, int32_t bufferPos)
|
|
13 {
|
|
14 if (v->SType & SType_Off)
|
|
15 return; // voice is not active
|
|
16
|
|
17 uint32_t volStatus = v->SLVol1 | v->SRVol1;
|
|
18 if (volumeRampingFlag)
|
|
19 volStatus |= v->SLVol2 | v->SRVol2;
|
|
20
|
|
21 if (volStatus == 0) // silence mix
|
|
22 {
|
|
23 const uint64_t samplesToMix = (uint64_t)v->SFrq * (uint32_t)numSamples; // 16.16fp
|
|
24
|
|
25 const int32_t samples = (int32_t)(samplesToMix >> 16);
|
|
26 const int32_t samplesFrac = (samplesToMix & 0xFFFF) + (v->SPosDec >> 16);
|
|
27
|
|
28 int32_t realPos = v->SPos + samples + (samplesFrac >> 16);
|
|
29 int32_t posFrac = samplesFrac & 0xFFFF;
|
|
30
|
|
31 if (realPos >= v->SLen)
|
|
32 {
|
|
33 uint8_t SType = v->SType;
|
|
34 if (SType & (SType_Fwd+SType_Rev))
|
|
35 {
|
|
36 do
|
|
37 {
|
|
38 SType ^= SType_RevDir;
|
|
39 realPos -= v->SRepL;
|
|
40 }
|
|
41 while (realPos >= v->SLen);
|
|
42 v->SType = SType;
|
|
43 }
|
|
44 else
|
|
45 {
|
|
46 v->SType = SType_Off;
|
|
47 return;
|
|
48 }
|
|
49 }
|
|
50
|
|
51 v->SPosDec = posFrac << 16;
|
|
52 v->SPos = realPos;
|
|
53 }
|
|
54 else // normal mixing
|
|
55 {
|
|
56 bool mixInCenter;
|
|
57 if (volumeRampingFlag)
|
|
58 mixInCenter = (v->SLVol2 == v->SRVol2) && (v->SLVolIP == v->SRVolIP);
|
|
59 else
|
|
60 mixInCenter = v->SLVol1 == v->SRVol1;
|
|
61
|
|
62 mixRoutineTable[(mixInCenter * 8) + v->SMixType](v, numSamples, bufferPos);
|
|
63 }
|
|
64 }
|
|
65
|
|
66 static void mix8b(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
67 {
|
|
68 int32_t sample;
|
|
69
|
|
70 GET_VOL
|
|
71 GET_MIXER_VARS
|
|
72 SET_BASE8
|
|
73
|
|
74 int32_t CDA_BytesLeft = numSamples;
|
|
75 while (CDA_BytesLeft > 0)
|
|
76 {
|
|
77 LIMIT_MIX_NUM
|
|
78 CDA_BytesLeft -= samplesToMix;
|
|
79
|
|
80 HANDLE_POS_START
|
|
81 for (i = 0; i < (samplesToMix & 3); i++)
|
|
82 {
|
|
83 MIX_8BIT
|
|
84 }
|
|
85 samplesToMix >>= 2;
|
|
86 for (i = 0; i < samplesToMix; i++)
|
|
87 {
|
|
88 MIX_8BIT
|
|
89 MIX_8BIT
|
|
90 MIX_8BIT
|
|
91 MIX_8BIT
|
|
92 }
|
|
93 HANDLE_POS_END
|
|
94 }
|
|
95
|
|
96 SET_BACK_MIXER_POS
|
|
97 }
|
|
98
|
|
99 static void mix8bIntrp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
100 {
|
|
101 int32_t sample, sample2;
|
|
102
|
|
103 GET_VOL
|
|
104 GET_MIXER_VARS
|
|
105 SET_BASE8
|
|
106
|
|
107 int32_t CDA_BytesLeft = numSamples;
|
|
108 while (CDA_BytesLeft > 0)
|
|
109 {
|
|
110 LIMIT_MIX_NUM
|
|
111 CDA_BytesLeft -= samplesToMix;
|
|
112
|
|
113 HANDLE_POS_START
|
|
114 for (i = 0; i < (samplesToMix & 3); i++)
|
|
115 {
|
|
116 MIX_8BIT_INTRP
|
|
117 }
|
|
118 samplesToMix >>= 2;
|
|
119 for (i = 0; i < samplesToMix; i++)
|
|
120 {
|
|
121 MIX_8BIT_INTRP
|
|
122 MIX_8BIT_INTRP
|
|
123 MIX_8BIT_INTRP
|
|
124 MIX_8BIT_INTRP
|
|
125 }
|
|
126 HANDLE_POS_END
|
|
127 }
|
|
128
|
|
129 SET_BACK_MIXER_POS
|
|
130 }
|
|
131
|
|
132 static void mix8bRamp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
133 {
|
|
134 int32_t sample;
|
|
135
|
|
136 GET_MIXER_VARS
|
|
137 GET_RAMP_VARS
|
|
138 SET_BASE8
|
|
139
|
|
140 int32_t CDA_BytesLeft = numSamples;
|
|
141 while (CDA_BytesLeft > 0)
|
|
142 {
|
|
143 LIMIT_MIX_NUM
|
|
144 LIMIT_MIX_NUM_RAMP
|
|
145 CDA_BytesLeft -= samplesToMix;
|
|
146
|
|
147 GET_VOL_RAMP
|
|
148 HANDLE_POS_START
|
|
149 for (i = 0; i < (samplesToMix & 3); i++)
|
|
150 {
|
|
151 MIX_8BIT
|
|
152 VOL_RAMP
|
|
153 }
|
|
154 samplesToMix >>= 2;
|
|
155 for (i = 0; i < samplesToMix; i++)
|
|
156 {
|
|
157 MIX_8BIT
|
|
158 VOL_RAMP
|
|
159 MIX_8BIT
|
|
160 VOL_RAMP
|
|
161 MIX_8BIT
|
|
162 VOL_RAMP
|
|
163 MIX_8BIT
|
|
164 VOL_RAMP
|
|
165 }
|
|
166 HANDLE_POS_END
|
|
167 SET_VOL_BACK
|
|
168 }
|
|
169
|
|
170 SET_BACK_MIXER_POS
|
|
171 }
|
|
172
|
|
173 static void mix8bRampIntrp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
174 {
|
|
175 int32_t sample, sample2;
|
|
176
|
|
177 GET_MIXER_VARS
|
|
178 GET_RAMP_VARS
|
|
179 SET_BASE8
|
|
180
|
|
181 int32_t CDA_BytesLeft = numSamples;
|
|
182 while (CDA_BytesLeft > 0)
|
|
183 {
|
|
184 LIMIT_MIX_NUM
|
|
185 LIMIT_MIX_NUM_RAMP
|
|
186 CDA_BytesLeft -= samplesToMix;
|
|
187
|
|
188 GET_VOL_RAMP
|
|
189 HANDLE_POS_START
|
|
190 for (i = 0; i < (samplesToMix & 3); i++)
|
|
191 {
|
|
192 MIX_8BIT_INTRP
|
|
193 VOL_RAMP
|
|
194 }
|
|
195 samplesToMix >>= 2;
|
|
196 for (i = 0; i < samplesToMix; i++)
|
|
197 {
|
|
198 MIX_8BIT_INTRP
|
|
199 VOL_RAMP
|
|
200 MIX_8BIT_INTRP
|
|
201 VOL_RAMP
|
|
202 MIX_8BIT_INTRP
|
|
203 VOL_RAMP
|
|
204 MIX_8BIT_INTRP
|
|
205 VOL_RAMP
|
|
206 }
|
|
207 HANDLE_POS_END
|
|
208 SET_VOL_BACK
|
|
209 }
|
|
210
|
|
211 SET_BACK_MIXER_POS
|
|
212 }
|
|
213
|
|
214 static void mix16b(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
215 {
|
|
216 int32_t sample;
|
|
217
|
|
218 GET_VOL
|
|
219 GET_MIXER_VARS
|
|
220 SET_BASE16
|
|
221
|
|
222 int32_t CDA_BytesLeft = numSamples;
|
|
223 while (CDA_BytesLeft > 0)
|
|
224 {
|
|
225 LIMIT_MIX_NUM
|
|
226 CDA_BytesLeft -= samplesToMix;
|
|
227
|
|
228 HANDLE_POS_START
|
|
229 for (i = 0; i < (samplesToMix & 3); i++)
|
|
230 {
|
|
231 MIX_16BIT
|
|
232 }
|
|
233 samplesToMix >>= 2;
|
|
234 for (i = 0; i < samplesToMix; i++)
|
|
235 {
|
|
236 MIX_16BIT
|
|
237 MIX_16BIT
|
|
238 MIX_16BIT
|
|
239 MIX_16BIT
|
|
240 }
|
|
241 HANDLE_POS_END
|
|
242 }
|
|
243
|
|
244 SET_BACK_MIXER_POS
|
|
245 }
|
|
246
|
|
247 static void mix16bIntrp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
248 {
|
|
249 int32_t sample, sample2;
|
|
250
|
|
251 GET_VOL
|
|
252 GET_MIXER_VARS
|
|
253 SET_BASE16
|
|
254
|
|
255 int32_t CDA_BytesLeft = numSamples;
|
|
256 while (CDA_BytesLeft > 0)
|
|
257 {
|
|
258 LIMIT_MIX_NUM
|
|
259 CDA_BytesLeft -= samplesToMix;
|
|
260
|
|
261 HANDLE_POS_START
|
|
262 for (i = 0; i < (samplesToMix & 3); i++)
|
|
263 {
|
|
264 MIX_16BIT_INTRP
|
|
265 }
|
|
266 samplesToMix >>= 2;
|
|
267 for (i = 0; i < samplesToMix; i++)
|
|
268 {
|
|
269 MIX_16BIT_INTRP
|
|
270 MIX_16BIT_INTRP
|
|
271 MIX_16BIT_INTRP
|
|
272 MIX_16BIT_INTRP
|
|
273 }
|
|
274 HANDLE_POS_END
|
|
275 }
|
|
276
|
|
277 SET_BACK_MIXER_POS
|
|
278 }
|
|
279
|
|
280 static void mix16bRamp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
281 {
|
|
282 int32_t sample;
|
|
283
|
|
284 GET_MIXER_VARS
|
|
285 GET_RAMP_VARS
|
|
286 SET_BASE16
|
|
287
|
|
288 int32_t CDA_BytesLeft = numSamples;
|
|
289 while (CDA_BytesLeft > 0)
|
|
290 {
|
|
291 LIMIT_MIX_NUM
|
|
292 LIMIT_MIX_NUM_RAMP
|
|
293 CDA_BytesLeft -= samplesToMix;
|
|
294
|
|
295 GET_VOL_RAMP
|
|
296 HANDLE_POS_START
|
|
297 for (i = 0; i < (samplesToMix & 3); i++)
|
|
298 {
|
|
299 MIX_16BIT
|
|
300 VOL_RAMP
|
|
301 }
|
|
302 samplesToMix >>= 2;
|
|
303 for (i = 0; i < samplesToMix; i++)
|
|
304 {
|
|
305 MIX_16BIT
|
|
306 VOL_RAMP
|
|
307 MIX_16BIT
|
|
308 VOL_RAMP
|
|
309 MIX_16BIT
|
|
310 VOL_RAMP
|
|
311 MIX_16BIT
|
|
312 VOL_RAMP
|
|
313 }
|
|
314 HANDLE_POS_END
|
|
315 SET_VOL_BACK
|
|
316 }
|
|
317
|
|
318 SET_BACK_MIXER_POS
|
|
319 }
|
|
320
|
|
321 static void mix16bRampIntrp(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
322 {
|
|
323 int32_t sample, sample2;
|
|
324
|
|
325 GET_MIXER_VARS
|
|
326 GET_RAMP_VARS
|
|
327 SET_BASE16
|
|
328
|
|
329 int32_t CDA_BytesLeft = numSamples;
|
|
330 while (CDA_BytesLeft > 0)
|
|
331 {
|
|
332 LIMIT_MIX_NUM
|
|
333 LIMIT_MIX_NUM_RAMP
|
|
334 CDA_BytesLeft -= samplesToMix;
|
|
335
|
|
336 GET_VOL_RAMP
|
|
337 HANDLE_POS_START
|
|
338 for (i = 0; i < (samplesToMix & 3); i++)
|
|
339 {
|
|
340 MIX_16BIT_INTRP
|
|
341 VOL_RAMP
|
|
342 }
|
|
343 samplesToMix >>= 2;
|
|
344 for (i = 0; i < samplesToMix; i++)
|
|
345 {
|
|
346 MIX_16BIT_INTRP
|
|
347 VOL_RAMP
|
|
348 MIX_16BIT_INTRP
|
|
349 VOL_RAMP
|
|
350 MIX_16BIT_INTRP
|
|
351 VOL_RAMP
|
|
352 MIX_16BIT_INTRP
|
|
353 VOL_RAMP
|
|
354 }
|
|
355 HANDLE_POS_END
|
|
356 SET_VOL_BACK
|
|
357 }
|
|
358
|
|
359 SET_BACK_MIXER_POS
|
|
360 }
|
|
361
|
|
362 static void mix8bCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
363 {
|
|
364 int32_t sample;
|
|
365
|
|
366 GET_VOL_CENTER
|
|
367 GET_MIXER_VARS
|
|
368 SET_BASE8
|
|
369
|
|
370 int32_t CDA_BytesLeft = numSamples;
|
|
371 while (CDA_BytesLeft > 0)
|
|
372 {
|
|
373 LIMIT_MIX_NUM
|
|
374 CDA_BytesLeft -= samplesToMix;
|
|
375
|
|
376 HANDLE_POS_START
|
|
377 for (i = 0; i < (samplesToMix & 3); i++)
|
|
378 {
|
|
379 MIX_8BIT_M
|
|
380 }
|
|
381 samplesToMix >>= 2;
|
|
382 for (i = 0; i < samplesToMix; i++)
|
|
383 {
|
|
384 MIX_8BIT_M
|
|
385 MIX_8BIT_M
|
|
386 MIX_8BIT_M
|
|
387 MIX_8BIT_M
|
|
388 }
|
|
389 HANDLE_POS_END
|
|
390 }
|
|
391
|
|
392 SET_BACK_MIXER_POS
|
|
393 }
|
|
394
|
|
395 static void mix8bIntrpCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
396 {
|
|
397 int32_t sample, sample2;
|
|
398
|
|
399 GET_VOL_CENTER
|
|
400 GET_MIXER_VARS
|
|
401 SET_BASE8
|
|
402
|
|
403 int32_t CDA_BytesLeft = numSamples;
|
|
404 while (CDA_BytesLeft > 0)
|
|
405 {
|
|
406 LIMIT_MIX_NUM
|
|
407 CDA_BytesLeft -= samplesToMix;
|
|
408
|
|
409 HANDLE_POS_START
|
|
410 for (i = 0; i < (samplesToMix & 3); i++)
|
|
411 {
|
|
412 MIX_8BIT_INTRP_M
|
|
413 }
|
|
414 samplesToMix >>= 2;
|
|
415 for (i = 0; i < samplesToMix; i++)
|
|
416 {
|
|
417 MIX_8BIT_INTRP_M
|
|
418 MIX_8BIT_INTRP_M
|
|
419 MIX_8BIT_INTRP_M
|
|
420 MIX_8BIT_INTRP_M
|
|
421 }
|
|
422 HANDLE_POS_END
|
|
423 }
|
|
424
|
|
425 SET_BACK_MIXER_POS
|
|
426 }
|
|
427
|
|
428 static void mix8bRampCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
429 {
|
|
430 int32_t sample;
|
|
431
|
|
432 GET_MIXER_VARS
|
|
433 GET_RAMP_VARS
|
|
434 SET_BASE8
|
|
435
|
|
436 int32_t CDA_BytesLeft = numSamples;
|
|
437 while (CDA_BytesLeft > 0)
|
|
438 {
|
|
439 LIMIT_MIX_NUM
|
|
440 LIMIT_MIX_NUM_RAMP
|
|
441 CDA_BytesLeft -= samplesToMix;
|
|
442
|
|
443 GET_VOL_RAMP
|
|
444 HANDLE_POS_START
|
|
445 for (i = 0; i < (samplesToMix & 3); i++)
|
|
446 {
|
|
447 MIX_8BIT_M
|
|
448 VOL_RAMP
|
|
449 }
|
|
450 samplesToMix >>= 2;
|
|
451 for (i = 0; i < samplesToMix; i++)
|
|
452 {
|
|
453 MIX_8BIT_M
|
|
454 VOL_RAMP
|
|
455 MIX_8BIT_M
|
|
456 VOL_RAMP
|
|
457 MIX_8BIT_M
|
|
458 VOL_RAMP
|
|
459 MIX_8BIT_M
|
|
460 VOL_RAMP
|
|
461 }
|
|
462 HANDLE_POS_END
|
|
463 SET_VOL_BACK
|
|
464 }
|
|
465
|
|
466 SET_BACK_MIXER_POS
|
|
467 }
|
|
468
|
|
469 static void mix8bRampIntrpCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
470 {
|
|
471 int32_t sample, sample2;
|
|
472
|
|
473 GET_MIXER_VARS
|
|
474 GET_RAMP_VARS
|
|
475 SET_BASE8
|
|
476
|
|
477 int32_t CDA_BytesLeft = numSamples;
|
|
478 while (CDA_BytesLeft > 0)
|
|
479 {
|
|
480 LIMIT_MIX_NUM
|
|
481 LIMIT_MIX_NUM_RAMP
|
|
482 CDA_BytesLeft -= samplesToMix;
|
|
483
|
|
484 GET_VOL_RAMP
|
|
485 HANDLE_POS_START
|
|
486 for (i = 0; i < (samplesToMix & 3); i++)
|
|
487 {
|
|
488 MIX_8BIT_INTRP_M
|
|
489 VOL_RAMP
|
|
490 }
|
|
491 samplesToMix >>= 2;
|
|
492 for (i = 0; i < samplesToMix; i++)
|
|
493 {
|
|
494 MIX_8BIT_INTRP_M
|
|
495 VOL_RAMP
|
|
496 MIX_8BIT_INTRP_M
|
|
497 VOL_RAMP
|
|
498 MIX_8BIT_INTRP_M
|
|
499 VOL_RAMP
|
|
500 MIX_8BIT_INTRP_M
|
|
501 VOL_RAMP
|
|
502 }
|
|
503 HANDLE_POS_END
|
|
504 SET_VOL_BACK
|
|
505 }
|
|
506
|
|
507 SET_BACK_MIXER_POS
|
|
508 }
|
|
509
|
|
510 static void mix16bCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
511 {
|
|
512 int32_t sample;
|
|
513
|
|
514 GET_VOL_CENTER
|
|
515 GET_MIXER_VARS
|
|
516 SET_BASE16
|
|
517
|
|
518 int32_t CDA_BytesLeft = numSamples;
|
|
519 while (CDA_BytesLeft > 0)
|
|
520 {
|
|
521 LIMIT_MIX_NUM
|
|
522 CDA_BytesLeft -= samplesToMix;
|
|
523
|
|
524 HANDLE_POS_START
|
|
525 for (i = 0; i < (samplesToMix & 3); i++)
|
|
526 {
|
|
527 MIX_16BIT_M
|
|
528 }
|
|
529 samplesToMix >>= 2;
|
|
530 for (i = 0; i < samplesToMix; i++)
|
|
531 {
|
|
532 MIX_16BIT_M
|
|
533 MIX_16BIT_M
|
|
534 MIX_16BIT_M
|
|
535 MIX_16BIT_M
|
|
536 }
|
|
537 HANDLE_POS_END
|
|
538 }
|
|
539
|
|
540 SET_BACK_MIXER_POS
|
|
541 }
|
|
542
|
|
543 static void mix16bIntrpCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
544 {
|
|
545 int32_t sample, sample2;
|
|
546
|
|
547 GET_VOL_CENTER
|
|
548 GET_MIXER_VARS
|
|
549 SET_BASE16
|
|
550
|
|
551 int32_t CDA_BytesLeft = numSamples;
|
|
552 while (CDA_BytesLeft > 0)
|
|
553 {
|
|
554 LIMIT_MIX_NUM
|
|
555 CDA_BytesLeft -= samplesToMix;
|
|
556
|
|
557 HANDLE_POS_START
|
|
558 for (i = 0; i < (samplesToMix & 3); i++)
|
|
559 {
|
|
560 MIX_16BIT_INTRP_M
|
|
561 }
|
|
562 samplesToMix >>= 2;
|
|
563 for (i = 0; i < samplesToMix; i++)
|
|
564 {
|
|
565 MIX_16BIT_INTRP_M
|
|
566 MIX_16BIT_INTRP_M
|
|
567 MIX_16BIT_INTRP_M
|
|
568 MIX_16BIT_INTRP_M
|
|
569 }
|
|
570 HANDLE_POS_END
|
|
571 }
|
|
572
|
|
573 SET_BACK_MIXER_POS
|
|
574 }
|
|
575
|
|
576 static void mix16bRampCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
577 {
|
|
578 int32_t sample;
|
|
579
|
|
580 GET_MIXER_VARS
|
|
581 GET_RAMP_VARS
|
|
582 SET_BASE16
|
|
583
|
|
584 int32_t CDA_BytesLeft = numSamples;
|
|
585 while (CDA_BytesLeft > 0)
|
|
586 {
|
|
587 LIMIT_MIX_NUM
|
|
588 LIMIT_MIX_NUM_RAMP
|
|
589 CDA_BytesLeft -= samplesToMix;
|
|
590
|
|
591 GET_VOL_RAMP
|
|
592 HANDLE_POS_START
|
|
593 for (i = 0; i < (samplesToMix & 3); i++)
|
|
594 {
|
|
595 MIX_16BIT_M
|
|
596 VOL_RAMP
|
|
597 }
|
|
598 samplesToMix >>= 2;
|
|
599 for (i = 0; i < samplesToMix; i++)
|
|
600 {
|
|
601 MIX_16BIT_M
|
|
602 VOL_RAMP
|
|
603 MIX_16BIT_M
|
|
604 VOL_RAMP
|
|
605 MIX_16BIT_M
|
|
606 VOL_RAMP
|
|
607 MIX_16BIT_M
|
|
608 VOL_RAMP
|
|
609 }
|
|
610 HANDLE_POS_END
|
|
611 SET_VOL_BACK
|
|
612 }
|
|
613
|
|
614 SET_BACK_MIXER_POS
|
|
615 }
|
|
616
|
|
617 static void mix16bRampIntrpCenter(CIType *v, uint32_t numSamples, uint32_t bufferPos)
|
|
618 {
|
|
619 int32_t sample, sample2;
|
|
620
|
|
621 GET_MIXER_VARS
|
|
622 GET_RAMP_VARS
|
|
623 SET_BASE16
|
|
624
|
|
625 int32_t CDA_BytesLeft = numSamples;
|
|
626 while (CDA_BytesLeft > 0)
|
|
627 {
|
|
628 LIMIT_MIX_NUM
|
|
629 LIMIT_MIX_NUM_RAMP
|
|
630 CDA_BytesLeft -= samplesToMix;
|
|
631
|
|
632 GET_VOL_RAMP
|
|
633 HANDLE_POS_START
|
|
634 for (i = 0; i < (samplesToMix & 3); i++)
|
|
635 {
|
|
636 MIX_16BIT_INTRP_M
|
|
637 VOL_RAMP
|
|
638 }
|
|
639 samplesToMix >>= 2;
|
|
640 for (i = 0; i < samplesToMix; i++)
|
|
641 {
|
|
642 MIX_16BIT_INTRP_M
|
|
643 VOL_RAMP
|
|
644 MIX_16BIT_INTRP_M
|
|
645 VOL_RAMP
|
|
646 MIX_16BIT_INTRP_M
|
|
647 VOL_RAMP
|
|
648 MIX_16BIT_INTRP_M
|
|
649 VOL_RAMP
|
|
650 }
|
|
651 HANDLE_POS_END
|
|
652 SET_VOL_BACK
|
|
653 }
|
|
654
|
|
655 SET_BACK_MIXER_POS
|
|
656 }
|
|
657
|
|
658 mixRoutine mixRoutineTable[16] =
|
|
659 {
|
|
660 (mixRoutine)mix8b,
|
|
661 (mixRoutine)mix8bIntrp,
|
|
662 (mixRoutine)mix8bRamp,
|
|
663 (mixRoutine)mix8bRampIntrp,
|
|
664 (mixRoutine)mix16b,
|
|
665 (mixRoutine)mix16bIntrp,
|
|
666 (mixRoutine)mix16bRamp,
|
|
667 (mixRoutine)mix16bRampIntrp,
|
|
668 (mixRoutine)mix8bCenter,
|
|
669 (mixRoutine)mix8bIntrpCenter,
|
|
670 (mixRoutine)mix8bRampCenter,
|
|
671 (mixRoutine)mix8bRampIntrpCenter,
|
|
672 (mixRoutine)mix16bCenter,
|
|
673 (mixRoutine)mix16bIntrpCenter,
|
|
674 (mixRoutine)mix16bRampCenter,
|
|
675 (mixRoutine)mix16bRampIntrpCenter
|
|
676 };
|