Skip to main content

XDspConnectWithMaximumStreamLimit

与硬件服务器建立连接,创建 XDSP 客户端实例,并分配处理所需的资源。此 API 与 XDspConnect API 类似,不同之处在于它接受两个额外的参数 maximumStreamCount 和 maximumChannelCount,以帮助减少 API 使用的总内存。同时活动的 XDSP 客户端全局上限为 8 个。

语法

参数

baseBuffer   _In_
类型:float*
由 XDSP 调用方分配的连续缓冲区,用于传递输入数据和获取输出数据。有关其他详细信息,请参阅下文的备注部分。 baseBufferLength   _In_
类型:uint32_t
baseBuffer 的长度(以字节为单位)。该长度至少为 64 KB,最多不能超过 500 MB。 aggregateImpulseResponseInSeconds   _In_
类型:uint32_t
表示将同时在此客户端上激活的所有单个脉冲响应的总时长。对于 XDspProcessType::ConvolutionaggregateImpulseResponseInSeconds 必须设置为大于零的值;否则必须为零。所有 XDSP 客户端的总脉冲响应时长全局上限为 128 秒。 maximumStreamCount   _In_
类型:uint32_t
此 XDspClientHandle 在任何给定时刻可处于活动状态的最大流数。此数量不能超过 256。如果超过此数量,XDspActivate 将返回 XDSP_E_NO_DEVICE_RESOURCES。 maximumChannelCount   _In_
类型:uint32_t
其值可以是 1(单声道流)或 2(立体声流)。如果使用其他值,此 API 将返回 E_INVALIDARG。 handle   _Outptr_
类型:XDspClientHandle*
XDSP 客户端的句柄,用于通过 XDspActivate 激活流,以及通过 XDspDisconnect 将客户端从硬件服务器断开连接。

返回值

类型:HRESULT 如果方法成功,则返回 S_OK。如果方法失败,则返回下列代码之一(部分列表):

备注

如果调用成功,调用方可以通过 XDspCommand 参数使用 baseBuffer 传递流的输入数据和获取输出数据。如果使用包络,此缓冲区还应包含用于存储包络参数的空间。有关包络的详细信息,请参阅使用 XDSP API 进行包络处理概述 在激活 XDSP 流之前,必须调用此函数以注册一大块内存,该内存足够容纳:作为输入的多个完整音频流、通过 XDspActivate 激活的所有 XDSP 流的多个输出缓冲区,以及在 XDspProcessType::ForwardFourierTransform 处理类型的 XDspCommand 中可能使用的多个块乘数缓冲区。请注意上文所述的此缓冲区的大小上下限要求。如果此调用成功,所有 XDSP 流都可以访问此内存块的任何部分。 此内存应通过 XMemAlloc() 分配,属性为:XALLOC_MEMTYPE_PHYSICAL_CACHEABLEXALLOC_PAGESIZE_64KBXALLOC_ALIGNMENT_64K 这些属性应使用 MAKE_XALLOC_ATTRIBUTES() 进行设置。 示例如下:
上述示例中的 allocatorId 应替换为标题使用的正确分配器 ID。 调用方需要自行分区并复用 baseBuffer,以容纳不同的输入流和多个流的输出缓冲区。impulseResponse 不必来自 baseBuffer,也可以来自调用方分配的任何内存。 在调用 XDspConnect 之前,不应释放 baseBuffer 所指向的内存。 传递给 XDSP API 的所有内存指针都必须为 16 字节对齐。 如果调用成功,将返回一个有效的 XDspClientHandle,用于 XDspActivateXDspDisconnect 调用。

要求

头文件: XDspAudio.h 库: Chad.lib 支持的平台: XBOX Series X|S

概念文档

另请参阅

XDSP
XDSPConnect
XDspDisconnect
XDSP Errors
使用 XDSP API 进行单流卷积概述
使用 XDSP API 进行单流 FFT/IFFT 概述
使用 XDSP API 进行带包络的单流卷积概述
最后修改于 2026年8月24日