2010-01-16 59 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