2022 年 10 月版本的新功能
- 新增了兩個 API:XDspConnectWithMaximumStreamLimit 與 XDspSubmitCommandWithEnvelope。如果可啟用的串流數量上限少於 256,XDspConnectWithMaximumStreamLimit 在內部會使用較少的記憶體。另一方面,XDspConnect 會以 256 個串流計算,因此會使用較多記憶體。 XDspSubmitCommandWithEnvelope 可對脈衝響應濾波器進行包絡處理。請參閱使用 XDSP API 進行包絡處理的概觀。
版本功能
- 對於迴旋積,支援的區塊大小為 512 和 1024 個框架。使用 1024 個框架的區塊大小時效能會較佳。
- 對於 FFT/IFFT,支援的區塊大小為 512、1024 和 2048 個框架。
- 迴旋積支援單聲道、立體聲及立體聲非交錯模式,並可搭配單聲道與立體聲脈衝響應。
- 呼叫 XDspConnect 或 XDspConnectWithMaximumStreamLimit 會建立與硬體的連線並傳回 XDspClientHandle。在任何時間點最多只能有 8 個連線處於作用中狀態。
- 呼叫 XDspConnect 時支援的 aggregateImpulseResponseInSeconds 上限為 128。這也是所有 XDspConnect 呼叫的總上限。如果單一 XDspConnect 呼叫的 aggregateImpulseResponseInSeconds 為 128,便無法再以大於 0 的 aggregateImpulseResponseInSeconds 值進行其他 XDspConnect 呼叫。aggregateImpulseResponseInSeconds 必須大於零,才能啟用串流進行迴旋積處理。
- 對於 XDspConnect 傳回的指定 XDspClientHandle,最多可使用 XDspActivate 啟用 256 個串流。對於 XDspConnectWithMaximumStreamLimit 傳回的指定 XDspClientHandle,最多可使用 XDspActivate 啟用 maximumStreamCount 個串流,其中 maximumStreamCount 是 XDspConnectWithMaximumStreamLimit 呼叫中使用的串流數量。這些串流可以是任何 XDspProcessType。
- 使用立體聲輸入時,支援的彙總脈衝響應上限會降為 64 秒。
- 傳遞給 API 的所有緩衝區都必須以 16 位元組對齊。如果緩衝區未以 16 位元組對齊,硬體可能會發生錯誤並重設。當硬體發生當機/停止回應時,XDspStatus.result 會指出 XDSP_E_DEVICE_FATAL_ERROR。
- 脈衝響應應位於頻域。我們提供了一個工具,可將時域的脈衝響應轉換為頻域。 請從 https://aka.ms/gdkdl 下載。
- 脈衝響應轉換工具現在包含縮減支援,可讓您以降低品質來換取更高的效能。如需詳細資訊,請參閱 XDSP 脈衝響應縮減概觀。
- 已改善 XDspConnect 呼叫的延遲。
已知問題
- 在 FFT/IFFT 處理中,XDspActivationOptions 的 “EnablePolarFormat” 選項相較於效能較佳的預設笛卡兒格式,需要相當長的時間。
最佳做法
- 即使硬體發生錯誤,提交給硬體的每個命令都會有回應。呼叫端應等候硬體處理完所有命令,再呼叫 XDspDeactivate 停用串流。XDspStatus.lastProcessedCommandSequence 會顯示硬體為此串流最後處理之命令的序號。其他 XDSP 串流不會受到影響,硬體會繼續處理它們的命令。
- 傳遞給 XDspConnect 呼叫的 “baseBuffer” 不應在所有串流都已使用 XDspDeactivate 停用且 XDspDisconnect 成功之前釋放。
- 每個串流都有內部佇列限制,達到此限制時,XDspSubmitCommand 會傳回 XDSP_E_QUEUE_FULL。遇到此錯誤時,請先給予硬體足夠的時間處理此串流的命令,再提交更多命令。XDspStatus.lastProcessedCommandSequence 可用來檢查硬體為此串流最後處理的命令。
- 迴旋積使用 1024 區塊大小時的效能比使用 512 區塊大小時更好。
- 迴旋積演算法在處理連續命令時並不一致,也就是說,並非所有區塊都需要相同的時間才能完成,有些區塊可能比其他區塊花費更長的時間。
暫停和繼續遊戲
遊戲必須能夠暫停和繼續,例如當使用者將其置於受限模式時。呼叫暫停處理常式時,只需停止向硬體提交 XDSP 命令即可。已提交的命令會正常處理,並據此更新 XDspStatus。範例
- 可從 https://aka.ms/gdkdl 及 ATG 範例下載。 範例逐步解說適用於單一串流迴旋積混響和單一串流 FFT IFFT
- GDK 下載入口網站 https://aka.ms/gdkdl 中的其他範例也包含一個 XDSP 範例,該範例使用硬體加速器將時域的脈衝響應轉換為頻域。此範例產生的輸出與 GDK 安裝中隨附的 Impulse Response Transform 工具完全相同。此範例示範如何使用硬體加速即時轉換脈衝響應,以搭配 XDSP API 使用。
