Now i study the part of FCEU Sound source code, i do not known the follow code mean, help!
1. fhinc=PAL?16626:14915; // *2 CPU clock rate
//#define NTSC_CPU 1789772.7272727272727272
//#define PAL_CPU 1662607.125
I think 16626 is not correct.
When PAL == 1: 14915/2/1789772 = 1/240 s
When PAL == 0: 16626/2/1662607 = 1/200 s
2. soundtsinc=(uint32)((uint64)(PAL?(long double)PAL_CPU*65536:(long double)NTSC_CPU*65536)/(FSettings.SndRate * 16));
I don't known "soundtsinc" is used to do.
void SetSoundVariables(void)
{
int x;
fhinc=PAL?16626:14915; // *2 CPU clock rate
fhinc*=24;
if(FSettings.SndRate)
{
wlookup1[0]=0;
for(x=1;x<32>>=4;
}
wlookup2[0]=0;
for(x=1;x<203>>=4;
}
if(FSettings.soundq>=1)
{
DoNoise=RDoNoise;
DoTriangle=RDoTriangle;
DoPCM=RDoPCM;
DoSQ1=RDoSQ1;
DoSQ2=RDoSQ2;
}
else
{
DoNoise=DoTriangle=DoPCM=DoSQ1=DoSQ2=Dummyfunc;
DoSQ1=RDoSQLQ;
DoSQ2=RDoSQLQ;
DoTriangle=RDoTriangleNoisePCMLQ;
DoNoise=RDoTriangleNoisePCMLQ;
DoPCM=RDoTriangleNoisePCMLQ;
}
}
else
{
DoNoise=DoTriangle=DoPCM=DoSQ1=DoSQ2=Dummyfunc;
return;
}
MakeFilters(FSettings.SndRate);
if(GameExpSound.RChange)
GameExpSound.RChange();
nesincsize=(int64)(((int64)1<<17)*(double)(PAL?PAL_CPU:NTSC_CPU)/(FSettings.SndRate * 16));
memset(sqacc,0,sizeof(sqacc));
memset(ChannelBC,0,sizeof(ChannelBC));
LoadDMCPeriod(DMCFormat&0xF); // For changing from PAL to NTSC
//(cpu_freq*65536)/(sample_rate*16)
soundtsinc=(uint32)((uint64)(PAL?(long double)PAL_CPU*65536:(long double)NTSC_CPU*65536)/(FSettings.SndRate * 16));
}