c# - Naudio 缓冲区和实时流

标签 c# naudio

我的应用程序是文本转语音应用程序。 我开发了一个基于 NAudio 的简单类来播放生成的波形字节数组(包含要读取的文本)。 这是我的代码:

private BufferedWaveProvider _bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 1));
private WaveOut _waveOut = new WaveOut();

public NAudioPlayer(){
_waveOut.Init(_bufferedWaveProvider);
_waveOut.Play();
}

public void Play(byte[] textBytes){
    _bufferedWaveProvider.ClearBuffer();
    _bufferedWaveProvider.AddSamples(textBytes, 0, textBytes.Length);
}

我不知道如何管理缓冲区以防止缓冲区满异常。 阅读其他帖子,我考虑过设置缓冲区长度,但我不知道字节数组的最大大小(由另一个应用程序发送)。 另外,我想避免播放时出现意外中断(所以我认为使用 Thread.sleep 让缓冲区放电不是一个好主意......)。

如何解决这个问题?

最佳答案

创建您自己的类,类似于 BufferedWaveProvider 中的代码,但是带有字节数组队列。每次有新的音频要播放时,请将其放入队列中。然后在 Read方法,依次从每个排队缓冲区返回字节,直到到达排队音频的末尾,然后返回零(它需要是永无止境的流,因此 Read 必须始终返回 count )。唯一棘手的一点是跟踪您要阅读的位置,因为很可能 Read 中请求的字节数。方法将小于排队缓冲区中可用的字节数。

关于c# - Naudio 缓冲区和实时流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27801812/

相关文章:

c# - 如何在 xamarin ui 测试中给出 ipa 文件的路径

c# - 重叠替换正则表达式?

c# - 两个具有相同命名空间的不同 DLL

c# - 结构和值类型(如 C# 的)是否会包含在 Java 7 中?

c# - NAudio算法播放频率可以实时平滑变化的正弦波

c# - 使用 .Net 自己的库在 C# 中捕获声音,仅此而已

c# - 如何找出字节的格式?南音频

c# - 应用文件夹图标更改

c# - 在音频文件中添加给定持续时间的蜂鸣声或静音 ||音频|| C#

c# - 如何将音频数据与时间相关联