Go to the documentation of this file.
40 #define A_LOADADPCM 11
42 #define A_INTERLEAVE 13
45 #if !(defined(VERSION_SH) || defined(VERSION_US))
58 #define A_RESAMPLE_ZOH 6
59 #define A_DMEMMOVE2 16
60 #define A_DOWNSAMPLE_HALF 17
61 #define A_ENVSETUP1 18
65 #define A_ENVSETUP2 22
69 #define A_DUPLICATE 26
80 #define A_CONTINUE 0x00
95 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
103 unsigned int flags:8;
104 unsigned int gain:16;
110 unsigned int flags:8;
111 unsigned int gain:16;
117 unsigned int flags:8;
118 unsigned int pad1:16;
125 unsigned int dmem:16;
126 unsigned int pad2:16;
127 unsigned int count:16;
133 unsigned int pad2:16;
140 unsigned int pad1:24;
146 unsigned int flags:8;
147 unsigned int pad1:16;
153 unsigned int flags:8;
154 unsigned int gain:16;
155 unsigned int dmemi:16;
156 unsigned int dmemo:16;
161 unsigned int flags:8;
162 unsigned int dmem2:16;
168 unsigned int flags:8;
169 unsigned int pitch:16;
175 unsigned int flags:8;
176 unsigned int pad1:16;
182 unsigned int pad1:24;
188 unsigned int pad1:24;
190 unsigned int number:4;
191 unsigned int base:24;
196 unsigned int flags:8;
197 unsigned int dmemin:16;
198 unsigned int dmemout:16;
199 unsigned int count:16;
204 unsigned int flags:8;
206 unsigned int voltgt:16;
207 unsigned int volrate:16;
213 unsigned int dmemin:16;
214 unsigned int dmemout:16;
215 unsigned int count:16;
221 unsigned int count:16;
228 unsigned int pad2:16;
243 #if IS_BIG_ENDIAN && !IS_64_BIT
246 Aclearbuff clearbuff;
248 Ainterleave interleave;
258 Aloadadpcm loadadpcm;
262 long long int force_union_align;
268 typedef short ADPCM_STATE[16];
273 typedef short POLEF_STATE[4];
278 typedef short RESAMPLE_STATE[16];
283 #define UNITY_PITCH 0x8000
284 #define MAX_RATIO 1.99996
289 typedef short ENVMIX_STATE[40];
347 #define aADPCMdec(pkt, f, s) \
349 Acmd *_a = (Acmd *)pkt; \
351 _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
352 _a->words.w1 = (uintptr_t)(s); \
358 #define aPoleFilter(pkt, f, g, s) \
360 Acmd *_a = (Acmd *)pkt; \
362 _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
363 _SHIFTL(g, 0, 16)); \
364 _a->words.w1 = (uintptr_t)(s); \
372 #define aClearBuffer(pkt, d, c) \
374 Acmd *_a = (Acmd *)pkt; \
376 _a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
377 _a->words.w1 = (uintptr_t)(c); \
405 #define aEnvMixer(pkt, f, s) \
407 Acmd *_a = (Acmd *)pkt; \
409 _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \
410 _a->words.w1 = (uintptr_t)(s); \
424 #define aInterleave(pkt, l, r) \
426 Acmd *_a = (Acmd *)pkt; \
428 _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \
429 _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
441 #define aLoadBuffer(pkt, s) \
443 Acmd *_a = (Acmd *)pkt; \
445 _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \
446 _a->words.w1 = (uintptr_t)(s); \
463 #define aMix(pkt, f, g, i, o) \
465 Acmd *_a = (Acmd *)pkt; \
467 _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
468 _SHIFTL(g, 0, 16)); \
469 _a->words.w1 = _SHIFTL(i,16, 16) | _SHIFTL(o, 0, 16); \
473 #define aPan(pkt, f, d, s) \
475 Acmd *_a = (Acmd *)pkt; \
477 _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
478 _SHIFTL(d, 0, 16)); \
479 _a->words.w1 = (uintptr_t)(s); \
515 #define aResample(pkt, f, p, s) \
517 Acmd *_a = (Acmd *)pkt; \
519 _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) |\
520 _SHIFTL(p, 0, 16)); \
521 _a->words.w1 = (uintptr_t)(s); \
533 #define aSaveBuffer(pkt, s) \
535 Acmd *_a = (Acmd *)pkt; \
537 _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \
538 _a->words.w1 = (uintptr_t)(s); \
547 #define aSegment(pkt, s, b) \
549 Acmd *_a = (Acmd *)pkt; \
551 _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
552 _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
559 #define aSetBuffer(pkt, f, i, o, c) \
561 Acmd *_a = (Acmd *)pkt; \
563 _a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \
564 _SHIFTL(i, 0, 16)); \
565 _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
572 #define aSetVolume(pkt, f, v, t, r) \
574 Acmd *_a = (Acmd *)pkt; \
576 _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
577 _SHIFTL(v, 0, 16)); \
578 _a->words.w1 = _SHIFTL(t, 16, 16) | _SHIFTL(r, 0, 16); \
587 #define aSetLoop(pkt, a) \
589 Acmd *_a = (Acmd *)pkt; \
590 _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
591 _a->words.w1 = (uintptr_t)(a); \
604 #define aDMEMMove(pkt, i, o, c) \
606 Acmd *_a = (Acmd *)pkt; \
608 _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
609 _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
620 #define aLoadADPCM(pkt, c, d) \
622 Acmd *_a = (Acmd *)pkt; \
624 _a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \
625 _a->words.w1 = (uintptr_t) (d); \
636 #define aSetVolume32(pkt, f, v, tr) \
638 Acmd *_a = (Acmd *)pkt; \
640 _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
641 _SHIFTL(v, 0, 16)); \
642 _a->words.w1 = (uintptr_t)(tr); \
645 #if defined(VERSION_SH) || defined(VERSION_US)
679 #define aS8Dec(pkt, f, s) \
681 Acmd *_a = (Acmd *)pkt; \
683 _a->words.w0 = _SHIFTL(A_S8DEC, 24, 8) | _SHIFTL(f, 16, 8); \
684 _a->words.w1 = (uintptr_t)(s); \
697 #define aAddMixer(pkt, s, d, c) \
699 Acmd *_a = (Acmd *)pkt; \
701 _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \
702 _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(0x7fff, 0, 16)); \
703 _a->words.w1 = (_SHIFTL(s, 16, 16) | _SHIFTL(d, 0, 16)); \
713 #define aLoadBuffer(pkt, s, d, c) \
715 Acmd *_a = (Acmd *)pkt; \
717 _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
718 _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
719 _a->words.w1 = (uintptr_t)(s); \
729 #define aSaveBuffer(pkt, s, d, c) \
731 Acmd *_a = (Acmd *)pkt; \
733 _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
734 _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
735 _a->words.w1 = (uintptr_t)(d); \
744 #define aDuplicate(pkt, s, d, c) \
746 Acmd *_a = (Acmd *)pkt; \
748 _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
749 _SHIFTL(c, 16, 8) | _SHIFTL(s, 0, 16)); \
750 _a->words.w1 = (_SHIFTL(d, 16, 16) | _SHIFTL(0x80, 0, 16)); \
766 #define aDMEMMove2(pkt, t, i, o, c) \
768 Acmd *_a = (Acmd *)pkt; \
770 _a->words.w0 = _SHIFTL(A_DMEMMOVE2, 24, 8) | \
771 _SHIFTL(t, 16, 8) | _SHIFTL(i, 0, 16); \
772 _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
792 #define aResampleZoh(pkt, pitch, startFract) \
794 Acmd *_a = (Acmd *)pkt; \
796 _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \
797 _SHIFTL(pitch, 0, 16)); \
798 _a->words.w1 = _SHIFTL(startFract, 0, 16); \
807 #define aDownsampleHalf(pkt, nSamples, i, o) \
809 Acmd *_a = (Acmd *)pkt; \
811 _a->words.w0 = (_SHIFTL(A_DOWNSAMPLE_HALF, 24, 8) | \
812 _SHIFTL(nSamples, 0, 16)); \
813 _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
827 #define aMix(pkt, g, i, o, c) \
829 Acmd *_a = (Acmd *)pkt; \
831 _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | \
832 _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(g, 0, 16)); \
833 _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
839 #define aEnvSetup1(pkt, initialVolReverb, rampReverb, rampLeft, rampRight) \
841 Acmd *_a = (Acmd *)pkt; \
843 _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \
844 _SHIFTL(initialVolReverb, 16, 8) | \
845 _SHIFTL(rampReverb, 0, 16)); \
846 _a->words.w1 = _SHIFTL(rampLeft, 16, 16) | \
847 _SHIFTL(rampRight, 0, 16); \
853 #define aEnvSetup2(pkt, initialVolLeft, initialVolRight) \
855 Acmd *_a = (Acmd *)pkt; \
857 _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \
858 _a->words.w1 = _SHIFTL(initialVolLeft, 16, 16) | \
859 _SHIFTL(initialVolRight, 0, 16); \
888 #define aEnvMixer(pkt, inBuf, nSamples, swapReverb, negLeft, negRight, \
889 dryLeft, dryRight, wetLeft, wetRight) \
891 Acmd *_a = (Acmd *)pkt; \
893 _a->words.w0 = (_SHIFTL(A_ENVMIXER, 24, 8) | \
894 _SHIFTL((inBuf) >> 4, 16, 8) | \
895 _SHIFTL(nSamples, 8, 8)) | \
896 _SHIFTL(swapReverb, 2, 1) | _SHIFTL(negLeft, 1, 1) |\
897 _SHIFTL(negRight, 0, 1); \
898 _a->words.w1 = _SHIFTL((dryLeft) >> 4, 24, 8) | \
899 _SHIFTL((dryRight) >> 4, 16, 8) | \
900 _SHIFTL((wetLeft) >> 4, 8, 8) | \
901 _SHIFTL((wetRight) >> 4, 0, 8); \
917 #define aInterleave(pkt, o, l, r, c) \
919 Acmd *_a = (Acmd *)pkt; \
921 _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8) | \
922 _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(o, 0, 16); \
923 _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
946 #define aFilter(pkt, f, countOrBuf, addr) \
948 Acmd *_a = (Acmd *)pkt; \
950 _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL((f), 16, 8) | \
951 _SHIFTL((countOrBuf), 0, 16); \
952 _a->words.w1 = (uintptr_t)(addr); \
964 #define aHiLoGain(pkt, g, buflen, i) \
966 Acmd *_a = (Acmd *)pkt; \
968 _a->words.w0 = _SHIFTL(A_HILOGAIN, 24, 8) | \
969 _SHIFTL((g), 16, 8) | _SHIFTL((buflen), 0, 16); \
970 _a->words.w1 = _SHIFTL((i), 16, 16); \
983 #define aUnknown25(pkt, f, c, o, i) \
985 Acmd *_a = (Acmd *)pkt; \
987 _a->words.w0 = (_SHIFTL(A_UNK_25, 24, 8) | \
988 _SHIFTL((f), 16, 8) | _SHIFTL((c), 0, 16)); \
989 _a->words.w1 = _SHIFTL((o), 16, 16) | _SHIFTL((i), 0, 16); \