如何生成给定频率的音频正弦波或方波?
我希望这样做是为了校准设备,那么这些波将有多精确?
您可以使用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)); }