\r
typedef struct\r
{\r
- int State;\r
- int AttackModeExp;\r
- int AttackRate;\r
- int DecayRate;\r
- int SustainLevel;\r
- int SustainModeExp;\r
- int SustainIncrease;\r
- int SustainRate;\r
- int ReleaseModeExp;\r
- int ReleaseRate;\r
+ unsigned char State:2;\r
+ unsigned char AttackModeExp:1;\r
+ unsigned char SustainModeExp:1;\r
+ unsigned char SustainIncrease:1;\r
+ unsigned char ReleaseModeExp:1;\r
+ unsigned char AttackRate;\r
+ unsigned char DecayRate;\r
+ unsigned char SustainLevel;\r
+ unsigned char SustainRate;\r
+ unsigned char ReleaseRate;\r
int EnvelopeVol;\r
- long lVolume;\r
- long lDummy1;\r
- long lDummy2;\r
} ADSRInfoEx;\r
\r
///////////////////////////////////////////////////////////\r
// MAIN CHANNEL STRUCT\r
typedef struct\r
{\r
- // no mutexes used anymore... don't need them to sync access\r
- //HANDLE hMutex;\r
-\r
- int bNew; // start flag\r
-\r
int iSBPos; // mixing stuff\r
int spos;\r
int sinc;\r
- int SB[32+32]; // Pete added another 32 dwords in 1.6 ... prevents overflow issues with gaussian/cubic interpolation (thanx xodnizel!), and can be used for even better interpolations, eh? :)\r
- int sval;\r
\r
unsigned char * pStart; // start ptr into sound mem\r
unsigned char * pCurr; // current pos in sound mem\r
unsigned char * pLoop; // loop ptr in sound mem\r
\r
- int bOn; // is channel active (sample playing?)\r
- int bStop; // is channel stopped (sample _can_ still be playing, ADSR Release phase)\r
- int bReverb; // can we do reverb on this channel? must have ctrl register bit, to get active\r
+ unsigned int bStop:1; // is channel stopped (sample _can_ still be playing, ADSR Release phase)\r
+ unsigned int bReverb:1; // can we do reverb on this channel? must have ctrl register bit, to get active\r
+ unsigned int bIgnoreLoop:1; // ignore loop bit, if an external loop address is used\r
+ unsigned int bRVBActive:1; // reverb active flag\r
+ unsigned int bNoise:1; // noise active flag\r
+ unsigned int bFMod:2; // freq mod (0=off, 1=sound channel, 2=freq channel)\r
+\r
int iActFreq; // current psx pitch\r
int iUsedFreq; // current pc pitch\r
int iLeftVolume; // left volume\r
- int iLeftVolRaw; // left psx volume value\r
- int bIgnoreLoop; // ignore loop bit, if an external loop address is used\r
- int iMute; // mute mode\r
int iRightVolume; // right volume\r
- int iRightVolRaw; // right psx volume value\r
- int iRawPitch; // raw pitch (0...3fff)\r
- int iIrqDone; // debug irq done flag\r
int s_1; // last decoding infos\r
int s_2;\r
- int bRVBActive; // reverb active flag\r
+ ADSRInfoEx ADSRX;\r
+ int iRawPitch; // raw pitch (0...3fff)\r
+\r
int iRVBOffset; // reverb offset\r
int iRVBRepeat; // reverb repeat\r
- int bNoise; // noise active flag\r
- int bFMod; // freq mod (0=off, 1=sound channel, 2=freq channel)\r
int iRVBNum; // another reverb helper\r
int iOldNoise; // old noise val for this channel \r
- ADSRInfo ADSR; // active ADSR settings\r
- ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start)\r
+\r
+ int SB[32+32];\r
} SPUCHAN;\r
\r
///////////////////////////////////////////////////////////\r
extern int iRecordMode;\r
extern int iUseReverb;\r
extern int iUseInterpolation;\r
-extern int iDisStereo;\r
// MISC\r
\r
extern int iSpuAsyncWait;\r
extern int bEndThread; \r
extern int bThreadEnded;\r
extern int bSpuInit;\r
-extern unsigned long dwNewChannel;\r
+extern unsigned int dwNewChannel;\r
+extern unsigned int dwChannelOn;\r
\r
extern int SSumR[];\r
extern int SSumL[];\r