> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.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](/zh-TW/reference/audio/xdspaudio/xdspaudio_members) 的概觀。XDSP 可讓遊戲運用 XBOX Series X|S 世代主機上的硬體加速迴旋積混響 (Hardware Accelerated Convolution Reverb) 功能。目前的實作能夠即時處理 80 秒的脈衝響應。例如,同時即時處理 40 個串流,每個串流各有 2 秒的脈衝響應。

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

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

### 版本功能

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

### 已知問題

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

### 最佳做法

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

### 暫停和繼續遊戲

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

### 範例

* 可從 [https://aka.ms/gdkdl](https://aka.ms/gdkdl) 及 ATG 範例下載。
  範例逐步解說適用於[單一串流迴旋積混響](/zh-TW/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution)和[單一串流 FFT IFFT](/zh-TW/build/console-features/audio/overviews/xdsp-overview-single-stream-fft-ifft)
* 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 內容)](/zh-TW/reference/audio/xdspaudio/xdspaudio_members)
  * 函式
    * [XDspConnectWithMaximumStreamLimit](/zh-TW/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit)
    * [XDspSubmitCommandWithEnvelope](/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope)
    * [XDspConnect](/zh-TW/reference/audio/xdspaudio/functions/xdspconnect)
    * [XDspActivate](/zh-TW/reference/audio/xdspaudio/functions/xdspactivate)
    * [XDspDeactivate](/zh-TW/reference/audio/xdspaudio/functions/xdspdeactivate)
    * [XDspDisconnect](/zh-TW/reference/audio/xdspaudio/functions/xdspdisconnect)
    * [XDspSubmitCommand](/zh-TW/reference/audio/xdspaudio/functions/xdspsubmitcommand)
  * 結構
    * [xdspstatus](/zh-TW/reference/audio/xdspaudio/structs/xdspstatus)


## Related topics

- [服務 C API 概觀 - PFLocalization.h](/zh-TW/services/playfab/api-references/c/pflocalization/pflocalization_members.md)
- [服務 C API 概觀 - PFStatistics.h](/zh-TW/services/playfab/api-references/c/pfstatistics/pfstatistics_members.md)
- [服務 C API 概觀 - PFLeaderboards.h](/zh-TW/services/playfab/api-references/c/pfleaderboards/pfleaderboards_members.md)
- [服務 C API 概觀 - PFPlatformSpecific.h](/zh-TW/services/playfab/api-references/c/pfplatformspecific/pfplatformspecific_members.md)
- [服務 C API 概觀 - PFStatisticsTypes.h](/zh-TW/services/playfab/api-references/c/pfstatisticstypes/pfstatisticstypes_members.md)
