1
private unsafe static void AudioStreamCallback(IntPtr buff, Int32 size) 
{
    byte[] samples = new byte[size];
    Marshal.Copy(buff, samples, 0, size);

    waveProvider.AddSamples(samples, 0, size);
    bytes_played += size;
}

在上面的代码中,buff是从一个用C. 对于日志记录,我打印了添加到样本的字节数。根据这个日志,在播放大约 2.4 Mb 样本后,我收到了下面提到的错误。

未处理的异常:System.InvalidOperationException:NAudio.Wave.BufferedWaveProvider.AddSamples(字节 [] 缓冲区,Int32 偏移量,Int32 计数)处的缓冲区已满

在添加新样本之前,我是否需要释放一些缓冲区或确保刷新旧条目?我查看了源代码,但没有找到与缓冲区大小相关的任何内容。我是不是错过了什么。

谢谢你的帮助。

4

1 回答 1

3

BufferedWaveProvider由固定大小的循环缓冲区支持。一旦它已满,它就会抛出异常(较新版本的 NAudio 允许您配置是否抛出异常或是否静默丢弃音频)。最新的代码还允许您BufferDuration在第一次调用之前设置AddSamples以从默认的 5 秒音频增加缓冲区大小。

于 2011-07-22T06:57:21.990 回答