什么原因导致音频输出口吃?

时间:2010-01-16 17:46:42

标签: audio kernel driver signal-processing

有一个非常常见的软件错误导致大约1秒的音频连续播放几次,造成一种口吃。我经常在玩电子游戏时注意到这一点。我知道这不是特定于体系结构的,我已经看到它发生在游戏机中,在旧PC中,它发生在5分钟前,当我启动Windows 7时。

我的问题是这种不一致的根本原因是什么?这种不一致是否会影响计算的其他部分?例如,如果调制解调器结束,则传输将被破坏。

2 个答案:

答案 0 :(得分:9)

声音通常使用circular buffer输出,然后由硬件和驱动程序处理。这样,您不必每0,02毫秒左右输出一个样本,但可以一次完成更多操作。这也意味着游戏可以花费更多的时间来运行游戏逻辑,而不必经常打断自己以解码新的样本。当游戏完成游戏逻辑中的迭代并更新游戏状态并重新绘制图形时,游戏可以解码更多样本。

如果没有足够快地完成,问题就出现了 - 这可能是因为突然需要做更多的工作,或者因为其他进程窃取了太多的CPU时间。如果未填充缓冲区,则声卡将继续从缓冲区读取 - 当它读取所有缓冲的样本时,下一个样本是它已经播放的样本。这导致你看到的小循环。

答案 1 :(得分:2)

作为猜测,我怀疑这是因为音频缓冲区的更新速度不够快,因此它只是重放缓冲区中的陈旧数据。

那就是说,我想这里有人能够深入研究这个问题。 : - )