> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XDSP 概觀

> 使用 XDSP API 在 XBOX Series X|S 主機上執行硬體加速的迴旋積混響、FFT 與 IFFT,以及脈衝響應包絡處理。

本主題提供 [XDSP API](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/xdspaudio_members.md) 的概觀。XDSP 可讓遊戲運用 XBOX Series X|S 世代主機上的硬體加速迴旋積混響 (Hardware Accelerated Convolution Reverb) 功能。目前的實作能夠即時處理 80 秒的脈衝響應。例如,同時即時處理 40 個串流,每個串流各有 2 秒的脈衝響應。

### 2022 年 10 月版本的新功能

* 新增了兩個 API:[XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 與 [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)。如果可啟用的串流數量上限少於 256,**XDspConnectWithMaximumStreamLimit** 在內部會使用較少的記憶體。另一方面,[XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 會以 256 個串流計算,因此會使用較多記憶體。
  **XDspSubmitCommandWithEnvelope** 可對脈衝響應濾波器進行包絡處理。請參閱[使用 XDSP API 進行包絡處理的概觀](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-enveloping.md)。

### 版本功能

* 對於迴旋積,支援的區塊大小為 512 和 1024 個框架。使用 1024 個框架的區塊大小時效能會較佳。
* 對於 FFT/IFFT,支援的區塊大小為 512、1024 和 2048 個框架。
* 迴旋積支援單聲道、立體聲及立體聲非交錯模式,並可搭配單聲道與立體聲脈衝響應。
* 呼叫 [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 或 [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 會建立與硬體的連線並傳回 XDspClientHandle。在任何時間點最多只能有 8 個連線處於作用中狀態。
* 呼叫 [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 時支援的 *aggregateImpulseResponseInSeconds* 上限為 128。這也是所有 XDspConnect 呼叫的總上限。如果單一 XDspConnect 呼叫的 aggregateImpulseResponseInSeconds 為 128,便無法再以大於 0 的 aggregateImpulseResponseInSeconds 值進行其他 XDspConnect 呼叫。aggregateImpulseResponseInSeconds 必須大於零,才能啟用串流進行迴旋積處理。
* 對於 [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 傳回的指定 [XDspClientHandle](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/handles/xdspclienthandle.md),最多可使用 [XDspActivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspactivate.md) 啟用 256 個串流。對於 [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 傳回的指定 [XDspClientHandle](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/handles/xdspclienthandle.md),最多可使用 [XDspActivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspactivate.md) 啟用 *maximumStreamCount* 個串流,其中 *maximumStreamCount* 是 **XDspConnectWithMaximumStreamLimit** 呼叫中使用的串流數量。這些串流可以是任何 [XDspProcessType](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/enums/xdspprocesstype.md)。
* 使用立體聲輸入時,支援的彙總脈衝響應上限會降為 64 秒。
* 傳遞給 API 的所有緩衝區都必須以 16 位元組對齊。如果緩衝區未以 16 位元組對齊,硬體可能會發生錯誤並重設。當硬體發生當機/停止回應時,[XDspStatus.result](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/structs/xdspstatus.md) 會指出 XDSP\_E\_DEVICE\_FATAL\_ERROR。
* **脈衝響應應位於頻域。我們提供了一個工具,可將時域的脈衝響應轉換為頻域。** 請從 [https://aka.ms/gdkdl](https://aka.ms/gdkdl) 下載。
* 脈衝響應轉換工具現在包含縮減支援,可讓您以降低品質來換取更高的效能。如需詳細資訊,請參閱 [XDSP 脈衝響應縮減概觀](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)。
* 已改善 [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 呼叫的延遲。

### 已知問題

* 在 FFT/IFFT 處理中,[XDspActivationOptions](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/enums/xdspactivationoptions.md) 的 "EnablePolarFormat" 選項相較於效能較佳的預設笛卡兒格式,需要相當長的時間。

### 最佳做法

* 即使硬體發生錯誤,提交給硬體的每個命令都會有回應。呼叫端應等候硬體處理完所有命令,再呼叫 [XDspDeactivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspdeactivate.md) 停用串流。[XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/structs/xdspstatus.md) 會顯示硬體為此串流最後處理之命令的序號。其他 XDSP 串流不會受到影響,硬體會繼續處理它們的命令。
* 傳遞給 [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md) 呼叫的 *"baseBuffer"* 不應在所有串流都已使用 [XDspDeactivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspdeactivate.md) 停用且 [XDspDisconnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspdisconnect.md) 成功之前釋放。
* 每個串流都有內部佇列限制,達到此限制時,[XDspSubmitCommand](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommand.md) 會傳回 XDSP\_E\_QUEUE\_FULL。遇到此錯誤時,請先給予硬體足夠的時間處理此串流的命令,再提交更多命令。[XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/structs/xdspstatus.md) 可用來檢查硬體為此串流最後處理的命令。
* 迴旋積使用 1024 區塊大小時的效能比使用 512 區塊大小時更好。
* 迴旋積演算法在處理連續命令時並不一致,也就是說,並非所有區塊都需要相同的時間才能完成,有些區塊可能比其他區塊花費更長的時間。

### 暫停和繼續遊戲

遊戲必須能夠暫停和繼續,例如當使用者將其置於受限模式時。呼叫暫停處理常式時,只需停止向硬體提交 XDSP 命令即可。已提交的命令會正常處理,並據此更新 XDspStatus。

### 範例

* 可從 [https://aka.ms/gdkdl](https://aka.ms/gdkdl) 及 ATG 範例下載。
  範例逐步解說適用於[單一串流迴旋積混響](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md)和[單一串流 FFT IFFT](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-single-stream-fft-ifft.md)
* GDK 下載入口網站 [https://aka.ms/gdkdl](https://aka.ms/gdkdl) 中的其他範例也包含一個 XDSP 範例,該範例使用硬體加速器將時域的脈衝響應轉換為頻域。此範例產生的輸出與 GDK 安裝中隨附的 Impulse Response Transform 工具完全相同。此範例示範如何使用硬體加速即時轉換脈衝響應,以搭配 XDSP API 使用。

### 連絡方式

如果您對此功能有任何疑問或顧慮,請傳送電子郵件至 [AnaAud@microsoft.com](mailto:AnaAud@microsoft.com) 或使用線上論壇。

## 參考 API 文件

* [Xdspaudio (API 內容)](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/xdspaudio_members.md)
  * 函式
    * [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md)
    * [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)
    * [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md)
    * [XDspActivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspactivate.md)
    * [XDspDeactivate](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspdeactivate.md)
    * [XDspDisconnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspdisconnect.md)
    * [XDspSubmitCommand](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommand.md)
  * 結構
    * [xdspstatus](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/structs/xdspstatus.md)


## Related topics

- [XDSP 音訊](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/xdspaudio_members.md)
- [XDSP 包絡概觀](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-enveloping.md)
- [XDSP 脈衝回應縮減概觀](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)
- [使用 XDSP API 進行單一串流摺積概觀](https://docs.xbox.com/zh-TW/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md)
- [XDspConnect](https://docs.xbox.com/zh-TW/reference/audio/xdspaudio/functions/xdspconnect.md)
