当我使用双打时,我遇到了精度损失,我似乎无法找到精度丢失的地方。我正在编写一个软件合成器,由于某种原因,振荡器(声波发生器)的输入频率在途中的某个地方出现了严重混叠。振荡器应该产生一个三角波形,并且正确的频率被传递给该方法,但是当结果在扬声器中播放时,我可以清楚地听到声音捕捉到不同的频率。
我正在使用 NAudio (http://naudio.codeplex.com/),这个方法对我想要生成的每个样本运行一次。
这是代码:
double counter = 0;
int samplecounter = 0;
public double GetNextTriangle(double frequency)
{
double samplesperwave = (double)Parent.WaveFormat.SampleRate / frequency;
double length = (double)samplecounter / samplesperwave;
if (length.CompareTo(0.25) == -1)
{
counter = length * 4.0;
}
else if (length.CompareTo(0.75) == -1)
{
counter = 1.0 - (length - 0.25) * 4.0;
}
else
{
counter = -1.0 + (length - 0.75) * 4.0;
}
samplecounter++;
samplecounter = samplecounter > samplesperwave ? 0 : samplecounter;
return counter;
}
提前致谢!//垫子