- for(;ch<MAXCHAN;ch++) // loop em all... we will collect 1 ms of sound of each playing channel
- {
- if(dwNewChannel&(1<<ch)) StartSound(ch); // start new sound
- if(!(dwChannelOn&(1<<ch))) continue; // channel not playing? next
-
- if(s_chan[ch].iActFreq!=s_chan[ch].iUsedFreq) // new psx frequency?
- VoiceChangeFrequency(ch);
-
- if(s_chan[ch].bNoise)
- d=do_samples_noise(ch, ns_from, ns_to);
- else if(s_chan[ch].bFMod==2 || (s_chan[ch].bFMod==0 && iUseInterpolation==0))
- d=do_samples_noint(ch, ns_from, ns_to);
- else if(s_chan[ch].bFMod==0 && iUseInterpolation==1)
- d=do_samples_simple(ch, ns_from, ns_to);
- else
- d=do_samples_default(ch, ns_from, ns_to);
- if(d>=0)
- {
- bIRQReturn=1;
- lastch=ch;
- lastns=ns_to=d;
- }
-
- MixADSR(ch, ns_from, ns_to);
-
- if(s_chan[ch].bFMod==2) // fmod freq channel
- memcpy(iFMod, ChanBuf, sizeof(iFMod));
- else if(s_chan[ch].bRVBActive)
- mix_chan_rvb(ns_from,ns_to-ns_from,s_chan[ch].iLeftVolume,s_chan[ch].iRightVolume);
- else
- mix_chan(ns_from,ns_to-ns_from,s_chan[ch].iLeftVolume,s_chan[ch].iRightVolume);
- }