openAL - 播放缓冲区时声音不稳定

时间:2011-05-05 14:14:36

标签: c++ c visual-studio openal

我有一个语音聊天,它接收rtp数据包(每个数据包包含20ms的语音afaik),将它们添加到缓冲区并播放。

如果我在缓冲数据包之后直接调用alSourcePlay()(我有5个缓冲区,每个缓冲区获得一个数据包,然后在播放数据包后重新使用),声音将“波动”,因为它将播放在另一个数据包到达之前输出缓冲区。

我的问题是你如何解决这个问题,以免音频播放不稳定?

1 个答案:

答案 0 :(得分:1)

如果你平均每分钟收到少于50个20ms的数据包,那么必须暂停一些地方。如果您在播放之前将数据包存储一段时间,那么您可以寻找自然暂停(静音)并将间隙与自然暂停结合起来,这样听起来更自然。存储得越多,播放效果就会越好,但做得太多,延迟就会变得不愉快。

您需要的缓冲量是品味问题。哪个更丑,声音不稳定或响应延迟。我想你必须设计它,这是一个变量,然后试验找到'快乐的媒介'

如果你是最短的,每秒10个数据包,则一个更简单的方案表明自己:在每个数据包之间放置4ms的延迟,这应该是不可检测的。跑1秒钟。查看已累积的数据包数量(如果只有40个数据包,则为零)调整数据包间延迟进行补偿。继续。

相关问题