簡體   English   中英

Core Audio (WASAPI) 緩沖區事件計時

[英]Core Audio (WASAPI) buffer event timing

我正在使用 Windows 核心音頻功能(主要是 WASAPI)來渲染專有 stream,遵循 Exclusive-Mode Streams 中的示例。

這會創建兩個交替播放和填充的緩沖區。 有一個與緩沖區完成相關的事件會喚醒線程,以便它可以重新填充剛剛完成的緩沖區。 GETPOSITION 顯示當當前緩沖區位於 160 幀緩沖區的第 147 幀時線程被喚醒。 這讓我有 13/160 的緩沖時間來獲取新的緩沖區、填充它並釋放它。 我有很多計算要做,時間不夠。 我想我可以控制處理器而不是在緩沖區被填滿時休眠,但這似乎不是正確的解決方案。

此外,即使我的進程是“PRO AUDIO”並且優先級為 25,有時緩沖區完成事件會延遲更遠,因此系統開始重播未填充的緩沖區。 我還沒有找到任何關於這個時間應該如何工作或如何控制的討論。 我預計緩沖區完成事件會在少量幀內到達下一個緩沖區。 有人熟悉這個東西嗎? 有解決方案還是有關於在哪里尋找的線索?

您應該有兩個線程。 在主線程中,進行所有音頻處理和計算,然后將結果傳遞到輔助線程。 輔助線程的工作僅是等待WASAPI事件並將主線程的乘積寫出到聲卡。 寫出音頻的線程應該不進行音頻處理。

看來您將共享模式設置為共享非獨占,在獨占模式下,當一個緩沖區完成時,您將獲得兩個大小相同的緩沖區,發出事件信號並返回相同大小的第二個緩沖區

但是,如果您將共享模式設置為共享,則只會為您提供一個緩沖區,幫助頁面 IAudioClient::GetDevicePeriod 方法對此進行了說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM