0

次の関数を使用して、オーディオ アプリケーションで再生する正弦波を生成しています。

public double NextSample(double frequency)
{
    Math.Sin(2.0 * Math.PI * frequency * position++ / sampleRate);
}

ここで、'position' は単に要求されたサンプルの総数です (したがって、'position' を 'sampleRate' で割った値が現在の時間を表します)。

関数は、渡された周波数が一定である限り、期待される結果を生成します。ただし、たとえば周波数間でスイープしようとすると、結果は非常に奇妙になります。周波数が変化している間、関数の出力は渡された周波数のようには聞こえないということ以外に、それを実際に説明することはできません。

誰でもこれを説明できますか?

編集:将来の参考のために、ここに解決策があります:

public double NextSample(double frequency)
{
    Math.Sin(phase += 2 * Math.PI * frequency / sampleRate);
}
4

0 に答える 0