Skip to main content

XDspSubmitCommandWithEnvelope

为给定的 XDSP 流向硬件队列提交一条命令。此 API 类似于向硬件提交一条命令的 XDspSubmitCommand,不同之处在于它还接受一个额外的参数 envelopeBuffer,该参数包含脉冲响应滤波器每个块的增益值。这些增益值在卷积过程中应用于脉冲响应。
在需要使用包络时,应使用指向包络缓冲区的有效指针调用此 API。调用方负责确保包络缓冲区在不再使用之前始终保持有效。若要停止使用包络,应使用 XDspSubmitCommand,或使用 envelopeBuffer 为 nullptr 的 XDspSubmitCommandWithEnvelope。 此 API 只应用于为 XDspProcessType::Convolution 激活的流。

语法

参数

handle   _In_
类型:XDspStreamHandle
有效的 XDSP 流句柄。 command   _In_
类型:XDspCommand*
指向 XDspCommand 结构的指针。 envelopeBuffer   _In_
类型:float*
指向脉冲响应滤波器每个块的增益值的指针,这些增益值将在卷积过程中应用。
此缓冲区必须是通过 XDspConnectXDspConnectWithMaximumStreamLimit 注册的内存的一部分,并且应为 16 字节对齐。此缓冲区由硬件使用,在使用此缓冲区的所有命令完成且已获取响应之前,不能修改或释放此缓冲区。 包络缓冲区中的增益值数量至少应为脉冲响应滤波器中的块数,计算方式如下:
uint32_t IRLengthInComplexValues = XDspActivationParameters::impulseResponseLengthInFloats/2;
uint32_t IRLengthInBlocks = IRLengthInComplexValues/ XDspActivationParameters::blockFrameCount;
uint32_t envelopeSize = ((IRLengthInBlocks * sizeof(float) + 15) & ~(0xF)) / sizeof(float);
此缓冲区遵循脉冲响应的大小。对于立体声脉冲响应,整个左声道的增益值后紧接整个右声道的增益值,方式与左声道脉冲响应后紧接右声道脉冲响应相同。 对于单声道脉冲响应,相同的增益值同时应用于立体声输入信号的左右两个声道。对于单声道脉冲响应滤波器,此缓冲区的最小大小应为 8 个 float 值;对于立体声脉冲响应滤波器,应为 16 个 float 值。 commandSequence   _Out_
类型:uint32_t*
指向 uint32_t 的指针,用于返回命令序号值。有关其他详细信息,请参阅备注部分。

返回值

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

备注

此调用速度较快,因为它不会分配资源或处理数据,仅将命令发送到硬件服务器。 卷积过程有 “n” 个阶段,包络只能在第一阶段切换或启用/禁用。这意味着包络效果可能不会立即生效,可能会延迟几次提交。 若要禁用包络参数,应调用 XDspSubmitCommand 或使用 envelopeBuffer 为空的 XDspSubmitCommandWithEnvelope 此调用还接受一个指向 uint32_t 的指针,用于返回命令序号值 commandSequence,以便日后跟踪命令结果何时就绪。此数字表示自会话开始以及在调用 XDspActivate 之后已成功提交的命令总数。第一条命令的数值为 1,之后每次 XDspSubmitCommandWithEnvelopeXDspSubmitCommand 调用成功时该数值都会加 1。 如果硬件服务器处于错误状态,XDspSubmitCommandWithEnvelope 将返回 XDSP_E_DEVICE_FATAL_ERROR 错误代码。此时,无法为处于失败状态的 XDSP 流提交更多命令。该流对应的 XDspStatus 也将显示相同的错误。受影响的 XDSP 流应通过检查 XDspStatus 等待所有已提交的命令由硬件处理完毕,然后在所有命令处理完成后使用 XDspDeactivate 将其停用。其他 XDSP 流不会受到影响,硬件将继续处理它们的命令。

要求

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

概念文档

另请参阅

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