【问题标题】:Periodically refill BufferedWaveProvider with NAudio (C#)使用 NAudio (C#) 定期重新填充 BufferedWaveProvider
【发布时间】:2015-03-18 07:54:39
【问题描述】:

我从一个波形文件中读取音频数据并将这个音频数据(没有波形头信息)保存在一个字节[]中。 现在我想在我的 C# 项目中使用 NAudio 从这个字节 [] 流式传输。 我希望缓冲区的长度约为 100 毫秒,并定期重新填充它,这样播放就不会停止。

我可以创建我的 BufferedWaveProvider 对象并用我的 byte[] 中的前 x 个字节填充它,但是: 如何知道缓冲区何时用尽?

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

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

希望有人能帮帮我。

【问题讨论】:

    标签: buffer playback naudio


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-30
      • 2018-10-17
      • 1970-01-01
      • 2011-12-27
      • 2021-05-12
      • 2011-09-29
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多