2010-01-16 86 views
2

有一个非常常见的软件错误,会导致大约1秒钟的音频连续播放几次,造成一种口吃。我在玩视频游戏时最经常注意到这一点。我知道这不是架构特定的,我已经看到它发生在控制台,旧PC中,它刚刚发生在5分钟前,当我启动Windows 7时。什么导致音频输出口吃?

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

回答

9

声音通常使用circular buffer输出,然后由硬件和驱动程序处理。这样,您不必每隔0.02毫秒输出一次样本,但可以一次完成更多工作。这也意味着游戏可以花更多时间来运行游戏逻辑,而不需要不断地自行解码新的样本。当游戏在游戏逻辑中完成迭代并且游戏状态被更新并且图形已被重新绘制时,游戏然后可以解码更多样本。

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

+0

+1这就是我期待的更深入的钻研。 :-) – 2010-01-16 18:06:26

2

作为一个猜测,我怀疑这是因为音频缓冲区没有被足够快地更新,因此它只是重播缓冲区中的陈旧数据。

这就是说,我想这里的人能够深入研究得多。 :-)

+0

就是这样:缓冲区不足。与更新内部声音缓冲区相比,OS很可能有更重要的事情要做。 – 2010-01-16 17:54:19