2014-01-26 35 views
0

我正在使用Windows核心音頻函數(主要是WASAPI)渲染獨佔流,遵循獨佔模式流中的示例。核心音頻(WASAPI)緩衝區事件時序

這會創建兩個交替緩衝區,並且交替播放和填充。有一個綁定到緩衝區完成的事件喚醒了線程,所以它可以重新填充剛剛完成的緩衝區。 GETPOSITION顯示當前緩衝區位於160幀緩衝區的第147幀時,線程被喚醒。這讓我有13/160的緩衝時間來獲得新的緩衝區,填充它並釋放它。我有很多計算要做,這是不夠的時間。我想我可以保持處理器的控制權,而不是在緩衝區填滿時進行睡眠,但這似乎不是正確的解決方案。

此外,即使我的進程是「PRO AUDIO」並且優先級爲25,但有時緩衝區完成事件仍會延遲,因此係統開始重新播放未填充的緩衝區。我還沒有找到關於這個時機應該如何工作或者如何控制的討論。我預計緩衝區完成事件會在少量幀內到達下一個緩衝區。有人熟悉這個東西嗎?要麼提供解決方案,要麼提供關於在哪裏尋找的線索?

回答

0

你應該有兩個線程。在主線程中,您可以進行所有音頻處理和計算,並將結果傳送到輔助線程。輔助線程的工作僅僅是等待WASAPI事件並將主線程的產品寫入聲卡。寫出音頻的線程應該不做音頻處理。