小编典典

在C#中创建正弦波或方波

c#

如何生成给定频率的音频正弦波或方波?

我希望这样做是为了校准设备,那么这些波将有多精确?


阅读 1669

收藏
2020-05-19

共1个答案

小编典典

您可以使用NAudio并创建派生的WaveStream,该输出输出正弦波或方波,您可以将其输出到声卡或写入WAV文件。如果使用32位浮点样本,则可以直接从sin函数中写入值,而不必进行缩放,因为它已经在-1和1之间。

至于准确性,您是指正确的频率还是正确的波形?没有真正的方波,甚至正弦波在其他频率下也可能会有一些非常安静的伪像。如果重要的是频率的准确性,则取决于声卡中时钟的稳定性和准确性。话虽这么说,我可以想象对于大多数用途而言,准确度已经足够了。

以下是一些示例代码,该示例代码以8 kHz采样率和16位采样(即非浮点数)进行1 kHz采样:

int sampleRate = 8000;
short[] buffer = new short[8000];
double amplitude = 0.25 * short.MaxValue;
double frequency = 1000;
for (int n = 0; n < buffer.Length; n++)
{
    buffer[n] = (short)(amplitude * Math.Sin((2 * Math.PI * n * frequency) / sampleRate));
}
2020-05-19