spu: don't stop a channel by adsr if we have potential irq
authornotaz <notasas@gmail.com>
Sat, 29 Jan 2011 17:47:46 +0000 (19:47 +0200)
committernotaz <notasas@gmail.com>
Sat, 29 Jan 2011 18:11:55 +0000 (20:11 +0200)
otherwise we might miss irqs

plugins/dfsound/adsr.c

index 2496e46..387a83b 100644 (file)
@@ -86,7 +86,10 @@ INLINE int MixADSR(int ch)                             // MIX ADSR
    if(s_chan[ch].ADSRX.EnvelopeVol<0) \r
     {\r
      s_chan[ch].ADSRX.EnvelopeVol=0;\r
    if(s_chan[ch].ADSRX.EnvelopeVol<0) \r
     {\r
      s_chan[ch].ADSRX.EnvelopeVol=0;\r
-     s_chan[ch].bOn=0;\r
+     // don't stop if this chan can still cause irqs\r
+     if(!(spuCtrl&0x40) || (s_chan[ch].pCurr > pSpuIrq && s_chan[ch].pLoop > pSpuIrq))\r
+      //s_chan[ch].bOn=0;\r
+      s_chan[ch].pCurr=(unsigned char *)-1;\r
      //s_chan[ch].bReverb=0;\r
      //s_chan[ch].bNoise=0;\r
     }\r
      //s_chan[ch].bReverb=0;\r
      //s_chan[ch].bNoise=0;\r
     }\r