使用 NAudio (C#) 定期重新填充 BufferedWaveProvider
Periodically refill BufferedWaveProvider with NAudio (C#)
我从一个 wave 文件中读取音频数据并将此音频数据(没有 wave 头信息)保存在一个 byte[] 中。
现在我想在我的 C# 项目中使用 NAudio 从这个字节 [] 流式传输。
我希望缓冲区的长度约为 100 毫秒并定期重新填充它,这样播放就不会停止。
我可以创建我的 BufferedWaveProvider 对象并用我的 byte[] 中的前 x 个字节填充它,但是:
我如何才能知道缓冲区何时 运行 低?
假设我第一次填充缓冲区。当我通过我的 WavePlayer 对象开始播放时,播放会在缓冲区播放完后停止。但是如何在播放光标到达缓冲区末尾之前用下一块音频数据重新填充此缓冲区?
这背后的原因是:
我想通过 FFT 转换每个缓冲区数据,以便我可以在我的 GUI 中绘制当前频率。
我希望有人能帮助我。
为什么要在这种情况下使用 BufferedWaveProvider
?只需将 WaveFileReader
/ AudioFileReader
传递给 SampleAggregator
(请参阅 NAudio WPF 演示源代码中的示例),然后从中播放。然后,每次计算 FFT 时都可以引发一个事件,这意味着声卡读取大小不必与 FFT 的大小匹配(通常不会,因为它不一定会读取两个样品)
我从一个 wave 文件中读取音频数据并将此音频数据(没有 wave 头信息)保存在一个 byte[] 中。 现在我想在我的 C# 项目中使用 NAudio 从这个字节 [] 流式传输。 我希望缓冲区的长度约为 100 毫秒并定期重新填充它,这样播放就不会停止。
我可以创建我的 BufferedWaveProvider 对象并用我的 byte[] 中的前 x 个字节填充它,但是: 我如何才能知道缓冲区何时 运行 低?
假设我第一次填充缓冲区。当我通过我的 WavePlayer 对象开始播放时,播放会在缓冲区播放完后停止。但是如何在播放光标到达缓冲区末尾之前用下一块音频数据重新填充此缓冲区?
这背后的原因是: 我想通过 FFT 转换每个缓冲区数据,以便我可以在我的 GUI 中绘制当前频率。
我希望有人能帮助我。
为什么要在这种情况下使用 BufferedWaveProvider
?只需将 WaveFileReader
/ AudioFileReader
传递给 SampleAggregator
(请参阅 NAudio WPF 演示源代码中的示例),然后从中播放。然后,每次计算 FFT 时都可以引发一个事件,这意味着声卡读取大小不必与 FFT 的大小匹配(通常不会,因为它不一定会读取两个样品)