StartADSR(ch);
StartREVERB(ch);
- // fussy timing issues - do in VoiceOn
- //s_chan[ch].pCurr=s_chan[ch].pStart; // set sample start
- //s_chan[ch].bStop=0;
- //s_chan[ch].bOn=1;
+ s_chan[ch].prevflags=2;
s_chan[ch].SB[26]=0; // init mixing vars
s_chan[ch].SB[27]=0;
s_chan[ch].spos=0;
spu.dwNewChannel&=~(1<<ch); // clear new channel bit
+ spu.dwChannelOn|=1<<ch;
+ spu.dwChannelDead&=~(1<<ch);
}
////////////////////////////////////////////////////////////////////////
else
d = do_samples_default(ch, ns_to);
- d = MixADSR(ch, d);
+ d = MixADSR(&s_chan[ch].ADSRX, d);
if (d < ns_to) {
spu.dwChannelOn &= ~(1 << ch);
- s_chan[ch].bStop = 1;
s_chan[ch].ADSRX.EnvelopeVol = 0;
memset(&ChanBuf[d], 0, (ns_to - d) * sizeof(ChanBuf[0]));
}