SetReadHandler(0x4015,0x4015,Read_PSG);
}
-static int32 WaveNSF[2048];
-
int32 highp; // 0 through 65536, 0 = no high pass, 65536 = max high pass
int32 lowp; // 0 through 65536, 65536 = max low pass(total attenuation)
// 65536 = no low pass
+static int32 flt_acc=0, flt_acc2=0;
+
static void FilterSound(uint32 *in, int16 *outMono, int count)
{
- static int32 acc=0, acc2=0;
// static int min=0, max=0;
for(;count;count--,in++,outMono++)
{
int32 diff;
- diff = *in - acc;
+ diff = *in - flt_acc;
- acc += (diff*highp)>>16;
- acc2+= (int32) (((int64)((diff-acc2)*lowp))>>16);
+ flt_acc += (diff*highp)>>16;
+ flt_acc2+= (int32) (((int64)((diff-flt_acc2)*lowp))>>16);
*in=0;
- *outMono = acc2*7 >> 2; // * 1.75
+ *outMono = flt_acc2*7 >> 2; // * 1.75
// if (acc2 < min) { printf("min: %i %04x\n", acc2, acc2); min = acc2; }
// if (acc2 > max) { printf("max: %i %04x\n", acc2, acc2); max = acc2; }
}
GameExpSound.Fill(end&0xF);
FilterSound(Wave,WaveFinalMono,end>>4);
-// printf("count %d, num ints %d\n", end, (end >> 4));
- if(FCEUGameInfo.type==GIT_NSF)
- {
- int x;//,s=0,si=end/1024;
- for(x=0;x<1024;x++)
- {
- //WaveNSF[x]=WaveFinal[s>>4];
- WaveNSF[x]=WaveFinalMono[x];
- //s+=si;
- }
- }
if(end&0xF)
Wave[0]=Wave[(end>>4)];
return(end);
}
-int GetSoundBuffer(int32 **W)
+int GetSoundBuffer(int16 **W)
{
- *W=WaveNSF;
+ *W=WaveFinalMono;
return inbuf;
}
if(highp>(1<<16)) highp=1<<16;
if(lowp>(1<<16)) lowp=1<<16;
+
+ flt_acc=flt_acc2=0;
}
void FixOldSaveStateSFreq(void)