X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=sound.c;h=bb3c89dbfec13deb087bba57d5028d8219371e24;hp=7e130fab3b4864b7d143fad596ba94eda684cf86;hb=3ee0ae39373065c2afa6ddd823a0f667d5875d8a;hpb=d447f17f693875013eed05ff3a2fce79cbe0b5f2 diff --git a/sound.c b/sound.c index 7e130fa..bb3c89d 100644 --- a/sound.c +++ b/sound.c @@ -869,28 +869,27 @@ void SetNESSoundMap(void) 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; } } @@ -923,17 +922,6 @@ int FlushEmulateSound(void) 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)]; @@ -948,9 +936,9 @@ int FlushEmulateSound(void) return(end); } -int GetSoundBuffer(int32 **W) +int GetSoundBuffer(int16 **W) { - *W=WaveNSF; + *W=WaveFinalMono; return inbuf; } @@ -1029,6 +1017,8 @@ void SetSoundVariables(void) if(highp>(1<<16)) highp=1<<16; if(lowp>(1<<16)) lowp=1<<16; + + flt_acc=flt_acc2=0; } void FixOldSaveStateSFreq(void)