Skip to main content

XDspSubmitCommandWithEnvelope

Envía un comando a la cola de hardware para una secuencia de XDSP determinada. Esta API es similar a XDspSubmitCommand en cuanto a que envía un comando al hardware, con la diferencia de que toma un parámetro adicional, envelopeBuffer, que contiene un valor de ganancia para cada bloque del filtro de respuesta al impulso. Estos valores de ganancia se aplican a la respuesta al impulso durante la convolución.
Cuando se desee usar una envolvente, esta API debe llamarse con un puntero válido al búfer de la envolvente. Es responsabilidad del autor de la llamada asegurarse de que el búfer de la envolvente siga siendo válido hasta que ya no se necesite. Para dejar de usar la envolvente, debe usarse XDspSubmitCommand o XDspSubmitCommandWithEnvelope con un nullptr para envelopeBuffer. Esta API solo debe usarse para una secuencia activada para XDspProcessType::Convolution.

Sintaxis

Parámetros

handle   _In_
Tipo: XDspStreamHandle
Un identificador de secuencia de XDSP válido. command   _In_
Tipo: XDspCommand*
Puntero a una estructura XDspCommand. envelopeBuffer   _In_
Tipo: float*
Puntero a los valores de ganancia de cada bloque del filtro de respuesta al impulso que se aplicarán durante la convolución.
Este búfer debe formar parte de la memoria registrada por XDspConnect o XDspConnectWithMaximumStreamLimit y debe estar alineado a 16 bytes. El hardware usa este búfer, por lo que no se puede modificar ni liberar hasta que todos los comandos que lo usan se hayan completado y se hayan recogido las respuestas. El número de valores de ganancia del búfer de la envolvente debe ser al menos el número de bloques del filtro de respuesta al impulso y se calcula de la manera siguiente.
uint32_t IRLengthInComplexValues = XDspActivationParameters::impulseResponseLengthInFloats/2;
uint32_t IRLengthInBlocks = IRLengthInComplexValues/ XDspActivationParameters::blockFrameCount;
uint32_t envelopeSize = ((IRLengthInBlocks * sizeof(float) + 15) & ~(0xF)) / sizeof(float);
Este búfer sigue el tamaño de la respuesta al impulso. En el caso de una respuesta al impulso estéreo, los valores de ganancia de todo el canal izquierdo van seguidos de los valores de ganancia de todo el canal derecho, de la misma manera que la respuesta al impulso del canal izquierdo va seguida de la respuesta al impulso del canal derecho. En el caso de una respuesta al impulso mono, los mismos valores de ganancia se aplican tanto al canal izquierdo como al derecho de una señal de entrada estéreo. El tamaño mínimo de este búfer debe ser de 8 valores float en el caso de un filtro de respuesta al impulso mono y de 16 valores float en el caso de un filtro de respuesta al impulso estéreo. commandSequence   _Out_
Tipo: uint32_t*
Puntero a uint32_t para devolver un valor de secuencia de comandos. Consulte la sección Comentarios para obtener más detalles.

Valor devuelto

Tipo: HRESULT Si el método se ejecuta correctamente, devuelve S_OK. Si el método no se ejecuta correctamente, devuelve el código siguiente (lista parcial):

Comentarios

Esta llamada será rápida, ya que no asigna recursos ni procesa datos y solo envía el comando al servidor de hardware. El proceso de convolución tiene ‘n’ fases y el uso de envolventes solo puede cambiarse, activarse o desactivarse en la primera fase. Esto significa que el efecto de la envolvente puede no ser inmediato y puede retrasarse algunos envíos. Para deshabilitar los parámetros de la envolvente, debe llamarse a XDspSubmitCommand o XDspSubmitCommandWithEnvelope con un envelopeBuffer nulo. Esta llamada también toma un puntero a uint32_t para devolver un valor de secuencia de comandos, commandSequence, con el fin de realizar un seguimiento de cuándo estará listo más adelante el resultado del comando. Este número representa el número total de comandos que se han enviado correctamente desde que se inició la sesión y después de llamar a XDspActivate. Este número será uno para el primer comando y se incrementa en uno por cada llamada correcta a XDspSubmitCommandWithEnvelope o XDspSubmitCommand posterior. Si el servidor de hardware está en un estado incorrecto, XDspSubmitCommandWithEnvelope devolverá el código de error XDSP_E_DEVICE_FATAL_ERROR. En este punto, no se pueden enviar más comandos para la secuencia de XDSP que está en estado de error. XDspStatus para la secuencia también indicará el mismo error. La secuencia de XDSP afectada debe esperar a que el hardware procese todos los comandos enviados comprobando XDspStatus y debe desactivarse mediante XDspDeactivate una vez que se procesen todos los comandos. Las demás secuencias de XDSP no se verán afectadas y el hardware seguirá procesando sus comandos.

Requisitos

Encabezado: XDspAudio.h Biblioteca: Chad.lib Plataformas compatibles: XBOX Series X|S

Documentación conceptual

Consulte también

XDSP
XdspSubmitCommand
Errores de XDSP
Información general de una convolución de secuencia única mediante la API de XDSP
Información general de una convolución de secuencia única con envolvente mediante la API de XDSP Información general de una FFT/IFFT de secuencia única mediante la API de XDSP
Última modificación el 28 de agosto de 2026