> ## 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-CN/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-CN/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 与 [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)。当可激活的最大流数少于 256 时，**XDspConnectWithMaximumStreamLimit** 会在内部占用更少的内存；相比之下，[XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 会按 256 条流预留内存，因此占用更多。
  **XDspSubmitCommandWithEnvelope** 支持对脉冲响应滤波器进行包络处理。详见 [使用 XDSP API 的包络概述](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-enveloping.md)。

### 版本特性

* 对于卷积，支持的块大小为 512 和 1024 帧。使用 1024 帧的块大小性能更好。
* 对于 FFT/IFFT，支持的块大小为 512、1024 和 2048 帧。
* 卷积支持单声道、立体声以及立体声去交错模式，并可搭配单声道或立体声脉冲响应。
* [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 或 [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 调用会建立与硬件的连接并返回一个 XDspClientHandle。任意时刻最多只能有 8 个处于活动状态的连接。
* [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 支持的 *aggregateImpulseResponseInSeconds* 最大值为 128。这也是所有 XDspConnect 调用累计的上限。如果某次 XDspConnect 调用将 aggregateImpulseResponseInSeconds 设为 128，则不能再有任何 aggregateImpulseResponseInSeconds 大于 0 的 XDspConnect 调用。要激活可用于卷积处理的流，aggregateImpulseResponseInSeconds 必须大于 0。
* 对于 [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 返回的每个 [XDspClientHandle](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/handles/xdspclienthandle.md)，通过 [XDspActivate](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspactivate.md) 最多可激活 256 个流。对于 [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) 返回的每个 [XDspClientHandle](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/handles/xdspclienthandle.md)，最多可以激活 *maximumStreamCount* 个流，其中 *maximumStreamCount* 就是调用 **XDspConnectWithMaximumStreamLimit** 时使用的流数。这些流可以是任意 [XDspProcessType](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/enums/xdspprocesstype.md)。
* 使用立体声输入时，支持的累计脉冲响应最大值降为 64 秒。
* 传给 API 的所有缓冲区都必须按 16 字节对齐。缓冲区未按 16 字节对齐时，硬件可能发生错误并重置。硬件崩溃或挂起时，[XDspStatus.result](https://docs.xbox.com/zh-CN/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-CN/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)。
* 对 [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 调用的延迟做了改进。

### 已知问题

* 在 FFT/IFFT 处理中，[XDspActivationOptions](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/enums/xdspactivationoptions.md) 中的 "EnablePolarFormat" 选项相较默认的笛卡尔格式耗时明显更长；后者性能更好。

### 最佳实践

* 即使硬件出现故障，为每条提交到硬件的命令都会返回一个响应。调用者在调用 [XDspDeactivate](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspdeactivate.md) 停用流之前，应等待硬件处理完所有命令。[XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/structs/xdspstatus.md) 显示硬件为该流处理的最后一条命令的序列号。其他 XDSP 流不会受影响，硬件会继续处理它们的命令。
* 传给 [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md) 调用的 *"baseBuffer"* 在所有流都通过 [XDspDeactivate](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspdeactivate.md) 停用且 [XDspDisconnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspdisconnect.md) 成功之前不应释放。
* 每条流都有内部队列上限，达到该上限时 [XDspSubmitCommand](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspsubmitcommand.md) 会返回 XDSP\_E\_QUEUE\_FULL。遇到此错误时，请给硬件足够时间处理该流的命令后再提交更多命令。可通过 [XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/structs/xdspstatus.md) 查看硬件为该流处理的最后一条命令。
* 卷积使用 1024 块大小时性能优于 512 块大小。
* 卷积算法在处理连续命令时并不均匀，即并非所有块耗时相同，有些块可能耗时更长。

### 游戏的暂停与恢复

游戏必须能够暂停和恢复，例如当用户将其切换到 Constrained 模式时。挂起处理器被调用时，只需停止向硬件提交 XDSP 命令即可。已提交的命令会正常处理，XDspStatus 会相应更新。

### 示例

* 可从 [https://aka.ms/gdkdl](https://aka.ms/gdkdl) 或 ATG 示例下载。
  可查阅示例走查：[单流卷积混响](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md) 和 [单流 FFT IFFT](https://docs.xbox.com/zh-CN/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-CN/reference/audio/xdspaudio/xdspaudio_members.md)
  * Functions
    * [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md)
    * [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)
    * [XDspConnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspconnect.md)
    * [XDspActivate](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspactivate.md)
    * [XDspDeactivate](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspdeactivate.md)
    * [XDspDisconnect](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspdisconnect.md)
    * [XDspSubmitCommand](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/functions/xdspsubmitcommand.md)
  * Structures
    * [xdspstatus](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/structs/xdspstatus.md)


## Related topics

- [XDSP 音频](https://docs.xbox.com/zh-CN/reference/audio/xdspaudio/xdspaudio_members.md)
- [XDSP 包络概述](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-enveloping.md)
- [XDSP 脉冲响应压缩概述](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)
- [使用 XDSP API 进行单流卷积概述](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md)
- [使用 XDSP API 进行带包络的单流卷积](https://docs.xbox.com/zh-CN/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution-with-envelope.md)
