我正在尝试创建一个类似于 NAudio 中的网络聊天演示的应用程序。
然而,在接收/收听端,我正在缓冲接收到的音频数据包,直到在调用 WaveProvider.addSamples() 之前获得其中的 2 个。我已经尝试过根本不缓冲,缓冲大量等,但问题仍然存在,所以我认为这不是明确的原因。
我遇到的问题是,无论我尝试添加采样的速度有多快,播放音频时 WaveProvider 都会反复耗尽(BufferedBytes == 0)。我运行了一些测试,我的调试输出是这样的:
- 0.690s WaveProvider 空
- 0.695s 样本添加到 WaveProvider
- 0.871s WaveProvider 空
- 0.875s 样本添加到 WaveProvider
- 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);
我将不胜感激有关此事的任何帮助。谢谢