ダブルスを使用しているときに精度が低下し、精度が低下している場所を見つけることができないようです。私はソフトウェアシンセサイザーを書いていますが、何らかの理由でオシレーター(音波発生器)の入力周波数が途中で大きくエイリアシングされます。オシレーターは三角波を生成することになっていて、正しい周波数がメソッドに渡されますが、結果がスピーカーで再生されると、音がさまざまな周波数にスナップするのがはっきりと聞こえます。
私はNAudio(http://naudio.codeplex.com/)を使用しており、このメソッドは、生成するサンプルごとに1回実行されます。
コードは次のとおりです。
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;
}
前もって感謝します!//マット