我从波形文件中读取音频数据,并将此音频数据(没有波形标题信息)保存在byte []中。 现在我想在我的C#项目中使用NAudio从这个字节[]中流式传输。 我希望缓冲区长约100ms并定期重新填充,因此播放永远不会停止。
我可以创建我的BufferedWaveProvider对象并用我的byte []中的前x个字节填充它,但是: 如何找出缓冲区何时运行不足?
我们说第一次填充缓冲区。当我通过WavePlayer对象开始播放时,播放缓冲区后播放停止。但是,在播放光标到达缓冲区末尾之前,如何用下一个音频数据块重新填充此缓冲区?
背后的原因是: 我想通过FFT转换每个缓冲区数据,这样我就可以在我的GUI中绘制当前频率。
我希望有人可以帮助我。
答案 0 :(得分:0)
为什么要在这种情况下使用BufferedWaveProvider
?只需将WaveFileReader
/ AudioFileReader
传递给SampleAggregator
(请参阅NAudio WPF演示的源代码中的示例),然后从中播放。然后,您可以在每次计算FFT时生成一个事件,这意味着声卡读取大小不必与FFT的大小相匹配(通常在赢得'必须读取两个样本的权力)