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

How often do WaveInEvent handlers fire?

我目前正在开发一个分析您声音的程序。 我有一个运行 WaveInEvent 的线程,该线程从麦克风录制音频。 当数据可用时(WaveInEventArgs 事件触发),它对其进行编码和序列化并将其发送到分析器。

我希望能够使用音频文件,比如 .mp3。 我是这样读的:

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

然后以同样的方式发送到分析器。

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

因此,作为第一步,我考虑读取音频文件 "in real time",然后从文件发送音频,就像它来自麦克风一样,但我不知道该怎么做。

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

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