X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fdfsound%2Fadsr.c;h=1e397af7851efe4feb2e6ed11ef71b37e5a2090e;hb=6d866bb7894b252fc430a24a97769511d5ead1ca;hp=2496e461a2cb5e45f39b979f5b0a8bdbba559948;hpb=ef79bbde537d6b9c745a7d86cb9df1d04c35590d;p=pcsx_rearmed.git diff --git a/plugins/dfsound/adsr.c b/plugins/dfsound/adsr.c index 2496e461..1e397af7 100644 --- a/plugins/dfsound/adsr.c +++ b/plugins/dfsound/adsr.c @@ -53,8 +53,7 @@ void InitADSR(void) // INIT ADSR INLINE void StartADSR(int ch) // MIX ADSR { - s_chan[ch].ADSRX.lVolume=1; // and init some adsr vars - s_chan[ch].ADSRX.State=0; + s_chan[ch].ADSRX.State=0; // and init some adsr vars s_chan[ch].ADSRX.EnvelopeVol=0; } @@ -86,13 +85,15 @@ INLINE int MixADSR(int ch) // MIX ADSR if(s_chan[ch].ADSRX.EnvelopeVol<0) { s_chan[ch].ADSRX.EnvelopeVol=0; - s_chan[ch].bOn=0; + // don't stop if this chan can still cause irqs + if(!(spuCtrl&0x40) || (s_chan[ch].pCurr > pSpuIrq && s_chan[ch].pLoop > pSpuIrq)) + //s_chan[ch].bOn=0; + s_chan[ch].pCurr=(unsigned char *)-1; //s_chan[ch].bReverb=0; //s_chan[ch].bNoise=0; } - s_chan[ch].ADSRX.lVolume=s_chan[ch].ADSRX.EnvelopeVol>>21; - return s_chan[ch].ADSRX.lVolume; + return s_chan[ch].ADSRX.EnvelopeVol>>21; } else // not stopped yet? { @@ -116,8 +117,7 @@ INLINE int MixADSR(int ch) // MIX ADSR s_chan[ch].ADSRX.State=1; } - s_chan[ch].ADSRX.lVolume=s_chan[ch].ADSRX.EnvelopeVol>>21; - return s_chan[ch].ADSRX.lVolume; + return s_chan[ch].ADSRX.EnvelopeVol>>21; } //--------------------------------------------------// if(s_chan[ch].ADSRX.State==1) // -> decay @@ -140,8 +140,7 @@ INLINE int MixADSR(int ch) // MIX ADSR s_chan[ch].ADSRX.State=2; } - s_chan[ch].ADSRX.lVolume=s_chan[ch].ADSRX.EnvelopeVol>>21; - return s_chan[ch].ADSRX.lVolume; + return s_chan[ch].ADSRX.EnvelopeVol>>21; } //--------------------------------------------------// if(s_chan[ch].ADSRX.State==2) // -> sustain @@ -191,8 +190,7 @@ INLINE int MixADSR(int ch) // MIX ADSR s_chan[ch].ADSRX.EnvelopeVol=0; } } - s_chan[ch].ADSRX.lVolume=s_chan[ch].ADSRX.EnvelopeVol>>21; - return s_chan[ch].ADSRX.lVolume; + return s_chan[ch].ADSRX.EnvelopeVol>>21; } } return 0;