您可以使用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));}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)