WaveInEvent处理程序多久会触发一次?

时间:2017-06-02 12:10:30

标签: c# audio naudio

我正在制作一个分析你的声音的程序。 我有一个运行WaveInEvent的线程,它记录麦克风的音频。 当数据可用时(WaveInEventArgs事件触发),它会对其进行编码并将其串行化并将其发送到分析器。

我希望能够使用音频文件,例如.mp3。 我正在读它:

byte[] audioFileBytes = File.ReadAllBytes(audioFilePath);

然后以相同的方式将其发送到分析仪。

我遇到了一些问题:音频文件没有在另一端处理 - 如果我使用“动态”音频输入它会工作。我猜它与缓冲区长度有关,但是我找不到WaveInEvent缓冲区的长度以及WaveInEventArgs事件触发的频率。 其次,数据在约2秒内处理,我习惯在实时获取时在分析器端收到的数据中添加时间戳,所以现在它为整个文件添加了一个时间戳。如果我每字节发送一个字节,我将在大约2秒钟内获得120万个时间戳,这仍然无法在图表上打印 - 加上图表应从0开始并以音频文件的长度结束(此处为70秒)我有的测试,而不是2秒。

因此,作为第一步,我考虑“实时”读取音频文件,并从文件中发送音频,就像它来自麦克风一样,但我不知道该怎么做。

我的问题归结为:WaveInEvent处理程序多久会触发一次?

1 个答案:

答案 0 :(得分:1)

这与缓冲区的长度有关。每次缓冲区充满音频时,事件都会触发。查看BufferMillisecondsNumberOfBuffers属性。您可以在开始录制之前将这些设置为所需的值。