spu: move more things to StartSound
authornotaz <notasas@gmail.com>
Thu, 1 Jan 2015 17:35:16 +0000 (19:35 +0200)
committernotaz <notasas@gmail.com>
Sat, 3 Jan 2015 00:25:30 +0000 (02:25 +0200)
plugins/dfsound/registers.c
plugins/dfsound/spu.c

index 210adb2..8e4956e 100644 (file)
@@ -362,16 +362,9 @@ static void SoundOn(int start,int end,unsigned short val)
   {\r
    if((val&1) && regAreaGet(ch,6))                     // mmm... start has to be set before key on !?!\r
     {\r
   {\r
    if((val&1) && regAreaGet(ch,6))                     // mmm... start has to be set before key on !?!\r
     {\r
-     // do this here, not in StartSound\r
-     // - fixes fussy timing issues\r
-     s_chan[ch].bStop=0;\r
      s_chan[ch].pCurr=spu.spuMemC+((regAreaGet(ch,6)&~1)<<3); // must be block aligned\r
      s_chan[ch].pLoop=spu.spuMemC+((regAreaGet(ch,14)&~1)<<3);\r
      s_chan[ch].pCurr=spu.spuMemC+((regAreaGet(ch,6)&~1)<<3); // must be block aligned\r
      s_chan[ch].pLoop=spu.spuMemC+((regAreaGet(ch,14)&~1)<<3);\r
-     s_chan[ch].prevflags=2;\r
-\r
      spu.dwNewChannel|=(1<<ch);\r
      spu.dwNewChannel|=(1<<ch);\r
-     spu.dwChannelOn|=1<<ch;\r
-     spu.dwChannelDead&=~(1<<ch);\r
     }\r
   }\r
 }\r
     }\r
   }\r
 }\r
index 1d5e28f..147db94 100644 (file)
@@ -238,10 +238,8 @@ INLINE void StartSound(int ch)
  StartADSR(ch);
  StartREVERB(ch);
 
  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].bStop=0;
+ s_chan[ch].prevflags=2;
 
  s_chan[ch].SB[26]=0;                                  // init mixing vars
  s_chan[ch].SB[27]=0;
 
  s_chan[ch].SB[26]=0;                                  // init mixing vars
  s_chan[ch].SB[27]=0;
@@ -254,6 +252,8 @@ INLINE void StartSound(int ch)
  s_chan[ch].spos=0;
 
  spu.dwNewChannel&=~(1<<ch);                           // clear new channel bit
  s_chan[ch].spos=0;
 
  spu.dwNewChannel&=~(1<<ch);                           // clear new channel bit
+ spu.dwChannelOn|=1<<ch;
+ spu.dwChannelDead&=~(1<<ch);
 }
 
 ////////////////////////////////////////////////////////////////////////
 }
 
 ////////////////////////////////////////////////////////////////////////