44 extern volatile u8 SNDleftVolume;
45 extern volatile u8 SNDrightVolume;
46 extern volatile s8 SNDfademasterVolume;
47 extern volatile u8 SNDspeedfade;
48 extern volatile u16 SNDdmaLoopCount;
49 extern void* SNDsourceTransfer;
50 extern volatile void* SNDendSourceTransfer;
51 extern void* SNDdestTransfer;
53 extern volatile void* SNDlastDMAposition;
54 extern volatile s8 SNDmasterVolume;
63 bool syncWithSoundtrack;
68 volatile s16 playerContext;
70 volatile u16 playerClientStep;
76 extern u8 SNDchannelVolume[];
80 #define SND_BEGIN case 0: snd.playerStart = __LINE__;
82 #define SND_LOADSAMPLE(MEDIA,RESOURCE) snd.currentLoadRequest = LOADrequestLoad(&RSC_##MEDIA##, RSC_##MEDIA##_ZIK__##RESOURCE##_RAW, snd.cache, LOAD_PRIOTITY_HIGH);
83 #define SND_WAIT_SAMPLELOADED case __LINE__: if ( snd.currentLoadRequest->processed == false ) return __LINE__; snd.currentLoadRequest->allocated = false; snd.currentLoadRequest = NULL;
85 #define SND_SYNC_COPYCACHE_TO_LEFT(OFFSET,LEN) SNDcopySample(snd.cache, snd.dmaBuffer + (OFFSET << 1) , LEN);
86 #define SND_SYNC_COPYCACHE_TO_RIGHT(OFFSET,LEN) SNDcopySample(snd.cache, snd.dmaBuffer + (OFFSET << 1) +1 , LEN);
88 #define SND_COPYCACHE_TO_LEFT(OFFSET,LEN) SNDsourceTransfer = snd.cache; SNDendSourceTransfer = snd.cache + LEN; SNDdestTransfer = snd.dmaBuffer + (OFFSET << 1);
89 #define SND_COPYCACHE_TO_RIGHT(OFFSET,LEN) SNDsourceTransfer = snd.cache; SNDendSourceTransfer = snd.cache + LEN; SNDdestTransfer = snd.dmaBuffer + (OFFSET << 1) + 1;
90 #define SND_WAIT_CACHECOPIED case __LINE__: if ( SNDsourceTransfer < SNDendSourceTransfer ) return __LINE__;
92 #define SND_VOLUME_SET(VOL) SNDmasterVolume = VOL; (*HW_MICROWIRE_MASK) = HW_MICROWIRE_MASK_SOUND; (*HW_MICROWIRE_DATA) = HW_MICROWIRE_VOLUME | VOL;
93 #define SND_VOLUME_FADEIN(STEP) SNDspeedfade = STEP; SNDmasterVolume = 0; SNDfademasterVolume = 1;
94 #define SND_VOLUME_FADEOUT(STEP) SNDspeedfade = STEP; SNDmasterVolume = 40; SNDfademasterVolume = -1;
96 #define SND_SETPANNING(PAN) SNDleftVolume = SNDchannelVolume[PAN]; SNDrightVolume = SNDchannelVolume[6 - PAN]; { STATIC_ASSERT(PAN<7); }
98 #define SND_DMALOOP_RESET snd.dmaLoopstart = SNDdmaLoopCount;
99 #define SND_WAIT_DMALOOP_REACH(COUNT) case __LINE__: if ( (SNDdmaLoopCount - snd.dmaLoopstart) < COUNT ) return __LINE__;
101 #define SND_IDLE case __LINE__: return __LINE__;
102 #define SND_RESTART return 0;
103 #define SND_WAIT_CLIENTSTEP(COUNT) case __LINE__: if (( snd.playerClientStep < COUNT ) && snd.syncWithSoundtrack ) return __LINE__;
107 void SNDcopySample (u8* _source, u8* _dest, u32 _length);
108 void SNDwaitDMALoop (
void);
109 void SNDwaitClientStep(u16 _clientStep);
110 void SNDplayNoise (u16 _freq, u16 _level);
111 void SNDstopNoise (
void);
114 u16 SNDtrace (
void* _image, u16 _pitch, u16 _planePitch, u16 _y);