Skip to main content
在本主題中,我們將逐步說明如何在使用 XDSP 於 XBOX Series X 裝置上執行摺積時使用脈衝回應縮減。此機制是為開發人員所開發的彈性方法,可在少量的音訊品質損失與大幅的效能提升之間做出適當的取捨,同時仍能利用 XDSP 所提供的硬體加速。

範例工具和原始程式碼

隨附的 IR 轉換工具可協助您將時域中的脈衝回應轉換為頻域,此工具已更新為支援縮減機制。您可以傳遞命令列參數來指定品質 (介於 0.0 到 99.9 之間,其中 0.0 表示將保留脈衝回應 99.9% 的能量,而 99.9 表示將保留 99.99% 的功率),以將工具設定為產生此表格。啟用此功能後,XDSP 將不會處理脈衝回應中功率極低的樣本 (零到接近零的值),以提高處理速度。 設定和寫入縮減表格的程式碼位於 main.cpp 檔案中一個名為 ImpulseResponseReduction 的類別中,而寫入縮減表格的函式是 ImpulseResponseReduction::SetReductionBlock。只要縮減表格的格式符合下列規格,您就可以自訂此程式碼以符合您的需求,讓您可以指定要為每個脈衝回應區塊處理多少個樣本。

縮減表格格式

脈衝回應縮減機制的運作基礎,是在頻域脈衝回應緩衝區的結尾加入縮減區塊。縮減區塊的大小為一個脈衝回應區塊,開頭是等於 0xFFFFACE1 的 4 位元組簽章,後面接著最多 15 個 4 位元組結構的項目。區塊的其餘部分應以 0 填滿。 4 位元組結構包含兩個 16 位元不帶正負號的值:截止頻率和區塊索引。 範例如下:
此範例以小端序編碼,可轉換為下表: 當 XDSP 處理這類縮減區塊時,會發生下列情況:
  • 硬體會處理完整的脈衝回應區塊,直到區塊 8 為止 (亦即前 8 個區塊,因為區塊索引從 0 開始)。
  • 從區塊 8 到區塊 86,硬體只會處理每個區塊的前 384 個樣本,並捨棄其餘的樣本,因為這些樣本被認為對輸出的影響非常小。
  • 從區塊 86 到區塊 102,硬體只會處理每個區塊的前 128 個樣本,並捨棄其餘的樣本。
  • 從區塊 102 到區塊 159,硬體只會處理每個區塊的前 16 個樣本,並捨棄其餘的樣本。由於此範例中的脈衝回應只有 158 個區塊,因此這代表表格中最後一個有效的項目。
  • 只有在下一個項目的區塊索引大於目前項目時,硬體才會將其視為有效;因此,表格的其餘部分會以最後一個有效項目填入,以表示這些項目無效且應被忽略。
此配置可讓硬體執行較少的處理,從而以更快的速度完成要求的作業,同時也讓開發人員能夠彈性地建立自己的演算法來最佳化其脈衝回應。

注意事項

實作自訂演算法以產生有效的脈衝縮減表格時,有幾個事項需要注意:
  • 區塊索引的值必須至少為 8;換句話說,絕對不能縮減脈衝回應的前 8 個區塊。
  • 截止頻率必須是 16 的倍數,且必須至少為 16。
  • 截止頻率不得超過區塊大小;否則會是無效的項目。
  • 脈衝回應縮減區塊的大小必須為一個完整的脈衝回應區塊。表格之後的空間預期會以 0 填滿。
  • 搭配縮減機制使用立體聲脈衝回應時,每個聲道的結尾都預期會有一個縮減區塊。
  • 在 XDspActivationParameters 中指定 impulseResponseLengthInFloats 參數時,請記得考量脈衝回應縮減區塊的額外空間。

參考 API 文件

另請參閱

XDSP 概觀
Last modified on October 6, 2026