定期用NAudio(C#)重新填充BufferedWaveProvider

时间:2015-03-18 07:54:39

标签: buffer playback naudio

我从波形文件中读取音频数据,并将此音频数据(没有波形标题信息)保存在byte []中。 现在我想在我的C#项目中使用NAudio从这个字节[]中流式传输。 我希望缓冲区长约100ms并定期重新填充,因此播放永远不会停止。

我可以创建我的BufferedWaveProvider对象并用我的byte []中的前x个字节填充它,但是: 如何找出缓冲区何时运行不足?

我们说第一次填充缓冲区。当我通过WavePlayer对象开始播放时,播放缓冲区后播放停止。但是,在播放光标到达缓冲区末尾之前,如何用下一个音频数据块重新填充此缓冲区?

背后的原因是: 我想通过FFT转换每个缓冲区数据,这样我就可以在我的GUI中绘制当前频率。

我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

为什么要在这种情况下使用BufferedWaveProvider?只需将WaveFileReader / AudioFileReader传递给SampleAggregator(请参阅NAudio WPF演示的源代码中的示例),然后从中播放。然后,您可以在每次计算FFT时生成一个事件,这意味着声卡读取大小不必与FFT的大小相匹配(通常在赢得'必须读取两个样本的权力)