- if(!iDebugMode) break;\r
- //----------------------------------------------// stuff below is only for debug mode\r
-\r
- s_chan[ch].ADSR.SustainModeExp = (lval&0x8000)?1:0;\r
- s_chan[ch].ADSR.ReleaseModeExp = (lval&0x0020)?1:0;\r
- \r
- lx=((((lval>>6) & 0x007f)>>2)); // sustain time... often very high\r
- lx=min(31,lx); // values are used to hold the volume\r
- if(lx) // until a sound stop occurs\r
- { // the highest value we reach (due to \r
- lx = (1<<lx); // overflow checking) is: \r
- if(lx<2147483) lx=(lx*SUSTAIN_MS)/10000L; // 94704 seconds = 1578 minutes = 26 hours... \r
- else lx=(lx/10000L)*SUSTAIN_MS; // should be enuff... if the stop doesn't \r
- if(!lx) lx=1; // come in this time span, I don't care :)\r
- }\r
- s_chan[ch].ADSR.SustainTime = lx;\r
-\r
- lx=(lval & 0x001f);\r
- s_chan[ch].ADSR.ReleaseVal =lx;\r
- if(lx) // release time from 100% to 0%\r
- { // note: the release time will be\r
- lx = (1<<lx); // adjusted when a stop is coming,\r
- if(lx<2147483) lx=(lx*RELEASE_MS)/10000L; // so at this time the adsr vol will \r
- else lx=(lx/10000L)*RELEASE_MS; // run from (current volume) to 0%\r
- if(!lx) lx=1;\r
- }\r
- s_chan[ch].ADSR.ReleaseTime=lx;\r
-\r
- if(lval & 0x4000) // add/dec flag\r
- s_chan[ch].ADSR.SustainModeDec=-1;\r
- else s_chan[ch].ADSR.SustainModeDec=1;\r