0

我正在尝试创建一个类似于 NAudio 中的网络聊天演示的应用程序。

然而,在接收/收听端,我正在缓冲接收到的音频数据包,直到在调用 WaveProvider.addSamples() 之前获得其中的 2 个。我已经尝试过根本不缓冲,缓冲大量等,但问题仍然存在,所以我认为这不是明确的原因。

我遇到的问题是,无论我尝试添加采样的速度有多快,播放音频时 WaveProvider 都会反复耗尽(BufferedBytes == 0)。我运行了一些测试,我的调试输出是这样的:

  1. 0.690s WaveProvider 空
  2. 0.695s 样本添加到 WaveProvider
  3. 0.871s WaveProvider 空
  4. 0.875s 样本添加到 WaveProvider
  5. 1.013s WaveProvider 空

... ETC。

WaveProvider 直到每 150 毫秒左右才显示“空”,这是有道理的,因为 addSamples 调用添加了与 100 毫秒音频数据相对应的数据。

有趣的部分是从 WaveProvider 为空到尝试下一个 addSamples 之间的 4 毫秒到 5 毫秒的时间。缓冲区大小没有变化或加快 addSamples 的努力似乎减少了这种差距,因此播放的音频总是有这些微小的静音间隙,听起来像爆裂声/中断。

我想知道这个微小的时间延迟是否可能是由于 WaveOut 设备正在播放时 WaveProvider 被锁定而导致的,因此我被锁定无法将样品添加到 WaveProvider 直到它完成播放?有没有办法纠正这个问题?

我的初始化代码如下:(我希望它们应该是正常的)

WaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 1));

WaveProvider.BufferDuration = new TimeSpan(0, 0, 10);

AudioPlayer = new WaveOut(WaveCallbackInfo.FunctionCallback());

AudioPlayer.Init(WaveProvider);

我将不胜感激有关此事的任何帮助。谢谢

4

1 回答 1

0

如果您接收数据的速度不如播放数据的速度,那么您将在播放过程中出现间隙,您对此无能为力。但是,您可以通过在缓冲(最多一秒钟)音频时自动暂停来改善体验。然后,如果缓冲区用完,您将再次暂停。这样,音频听起来会少很多波涛汹涌。

于 2012-06-22T14:18:22.230 回答