Skip to main content
En este tema, se explica el uso de la envolvente como parte de la realización de la convolución en dispositivos XBOX Series X|S mediante XDSP. Este mecanismo se desarrolló como un método flexible para que los desarrolladores modifiquen dinámicamente una parte del filtro de respuesta al impulso en la secuencia existente sin reactivar una nueva secuencia. Se proporciona la API XDspSubmitCommandWithEnvelope, que toma un envelopeBuffer con valores de ganancia para cada bloque del filtro de respuesta al impulso, además de los parámetros proporcionados a la API XDspSubmitCommand. Los valores de ganancia se multiplican por los bloques correspondientes del filtro de respuesta al impulso durante el proceso de convolución para proporcionar el efecto deseado. El filtro de respuesta al impulso original no se modifica durante este proceso. Para comprender mejor el mecanismo de envolvente, definamos las siguientes variables en el dominio de la frecuencia:
  • Sea la señal del filtro de respuesta al impulso para el intervalo de frecuencia n del bloque m f[n,m] = f_Real[n,m] + if_Imag[n,m].
  • Sea la señal de entrada para el intervalo de frecuencia n del bloque m s[n,m] = s_Real[n,m] + is_Imag[n,m].
  • Sea el valor de ganancia para un bloque de filtro m representado como K[m] (la ganancia de envolvente para el bloque m).
Entonces, la representación matemática de la envolvente es la siguiente: r[n,m] = K[m] * f[n,m] * s[n,m] r[n,m] = K[m] * (f_Real[n,m] + if_Imag[n,m]) * (s_Real[n,m] + is_Imag[n,m]) Donde r[n,m] es la salida convolucional después de que cada intervalo de frecuencia y bloque se haya escalado según la ganancia de envolvente asociada. Si no se especifica ninguna ganancia de envolvente, entonces K[m] = 1.0f para todos los bloques m.

Búfer de envolvente

El búfer de envolvente contiene valores de ganancia en float para cada bloque del filtro de respuesta al impulso que se aplicará durante la convolución. 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 para un filtro de respuesta al impulso estéreo. En el caso de una respuesta al impulso estéreo, el búfer de envolvente contiene valores de ganancia para ambos canales, con los valores de ganancia de todo el canal izquierdo seguidos de los valores de ganancia de todo el canal derecho. La longitud de la envolvente para cada canal debe ser un múltiplo de 16 bytes; de lo contrario, la salida puede no ser correcta. Cualquier valor adicional resultante del redondeo hacia arriba al múltiplo de 16 bytes más cercano se ignorará. Todos los punteros de búfer deben estar alineados a 16 bytes. 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 y no se puede modificar ni liberar hasta que se hayan completado todos los comandos que lo usan y se hayan recogido las respuestas. El número de valores de ganancia en el búfer de envolvente debe ser el número de bloques del filtro de respuesta al impulso redondeado hacia arriba al múltiplo de 16 bytes más cercano, y se calcula de la siguiente manera.
Este búfer sigue la naturaleza del filtro de respuesta al impulso. Para 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, del mismo modo que la respuesta al impulso del canal izquierdo va seguida de la respuesta al impulso del canal derecho. Para una respuesta al impulso mono, se aplican los mismos valores de ganancia tanto al canal izquierdo como al derecho de una señal de entrada estéreo.

Uso de la API

Este es un patrón de uso de la API de ejemplo. Consulte las notas siguientes para obtener detalles adicionales.

Notas

La convolución se implementa como un proceso de varias etapas y cada paquete de entrada pasa por una de estas etapas. Para mantener la salida uniforme, la envolvente solo se puede activar o desactivar en la primera etapa. Esto significa que el efecto de envolvente puede no activarse o desactivarse inmediatamente cuando se envía el comando. Es posible que se necesiten unas cuantas llamadas para que surta efecto.

Documentación de referencia de la API

Consulte también

Información general de XDSP XDspSubmitCommandWithEnvelope Información general de una convolución de secuencia única con envolvente mediante la API XDSP
Última modificación el 28 de agosto de 2026