X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=plugins%2Fdfsound%2Fspu.c;h=de7d2f250c9b22c17de695addc0b8287fab678de;hb=5aa94fa080e1b0a661b23aa912022dd464d41110;hp=35d890d975b727f2a8eda0b1f9aeb568a3a6b8cd;hpb=f3fa20c2fc7cff9352b5bcbe23e8b682bdcf0b2c;p=pcsx_rearmed.git diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c index 35d890d9..de7d2f25 100644 --- a/plugins/dfsound/spu.c +++ b/plugins/dfsound/spu.c @@ -250,8 +250,9 @@ static void StartSoundMain(int ch) s_chan->pCurr = spu.spuMemC+((regAreaGet(ch,6)&~1)<<3); spu.dwNewChannel&=~(1<iRawPitch) + spu.dwChannelsAudible|=1<>= 1) // loop em all... { if (!(mask & 1)) continue; // channel not playing? next @@ -800,7 +801,8 @@ static void do_channels(int ns_to) d = MixADSR(&s_chan->ADSRX, d); if (d < ns_to) { - spu.dwChannelOn &= ~(1 << ch); + spu.dwChannelsAudible &= ~(1 << ch); + s_chan->ADSRX.State = ADSR_RELEASE; s_chan->ADSRX.EnvelopeVol = 0; memset(&ChanBuf[d], 0, (ns_to - d) * sizeof(ChanBuf[0])); } @@ -937,7 +939,7 @@ static void queue_channel_work(int ns_to, unsigned int silentch) StartSoundMain(ch); } - mask = work->channels_on = spu.dwChannelOn & 0xffffff; + mask = work->channels_on = spu.dwChannelsAudible & 0xffffff; spu.decode_dirty_ch |= mask & 0x0a; for (ch = 0; mask != 0; ch++, mask >>= 1) @@ -962,7 +964,7 @@ static void queue_channel_work(int ns_to, unsigned int silentch) // note: d is not accurate on skip d = SkipADSR(&s_chan->ADSRX, d); if (d < ns_to) { - spu.dwChannelOn &= ~(1 << ch); + spu.dwChannelsAudible &= ~(1 << ch); s_chan->ADSRX.EnvelopeVol = 0; } } @@ -1105,7 +1107,7 @@ void do_samples(unsigned int cycles_to, int do_direct) return; } - silentch = ~(spu.dwChannelOn | spu.dwNewChannel) & 0xffffff; + silentch = ~(spu.dwChannelsAudible | spu.dwNewChannel) & 0xffffff; do_direct |= (silentch == 0xffffff); if (worker != NULL) @@ -1623,7 +1625,7 @@ void spu_get_debug_info(int *chans_out, int *run_chans, int *fmod_chans_out, int for(;ch