Novedades de la versión de octubre de 2022
- Se han agregado dos nuevas API: XDspConnectWithMaximumStreamLimit y XDspSubmitCommandWithEnvelope. XDspConnectWithMaximumStreamLimit usa menos memoria internamente si el número máximo de secuencias que se pueden activar es inferior a 256. XDspConnect, en cambio, reserva capacidad para 256 secuencias y, por tanto, usa más memoria. XDspSubmitCommandWithEnvelope permite aplicar una envolvente al filtro de respuesta al impulso. Consulte Información general sobre la envolvente mediante la API XDSP.
Características de la versión
- Para la convolución, los tamaños de bloque admitidos son de 512 y 1024 tramas. El rendimiento será mejor con un tamaño de bloque de 1024 tramas.
- Para FFT/IFFT, los tamaños de bloque admitidos son de 512, 1024 y 2048 tramas.
- La convolución se admite en los modos mono, estéreo y estéreo desentrelazado, con respuestas al impulso mono y estéreo.
- La llamada a XDspConnect o a XDspConnectWithMaximumStreamLimit establece una conexión con el hardware y devuelve un XDspClientHandle. Solo puede haber 8 conexiones activas en un momento dado.
- El valor máximo de aggregateImpulseResponseInSeconds admitido en la llamada a XDspConnect es 128. Este también es el máximo entre todas las llamadas a XDspConnect. Si se realiza una única llamada a XDspConnect con 128 para aggregateImpulseResponseInSeconds, no se pueden realizar más llamadas a XDspConnect con un valor de aggregateImpulseResponseInSeconds mayor que 0. aggregateImpulseResponseInSeconds debe ser mayor que cero para permitir la activación de secuencias para el procesamiento de convolución.
- Se pueden activar un máximo de 256 secuencias mediante XDspActivate para un XDspClientHandle dado devuelto por XDspConnect. Se pueden activar un máximo de maximumStreamCount secuencias mediante XDspActivate para un XDspClientHandle dado devuelto por XDspConnectWithMaximumStreamLimit, donde maximumStreamCount es el número de secuencias usado en la llamada a XDspConnectWithMaximumStreamLimit. Estas secuencias pueden ser de cualquier XDspProcessType.
- Cuando se usa entrada estéreo, la respuesta al impulso agregada máxima admitida se reduce a 64 segundos.
- Todos los búferes pasados a la API deben estar alineados a 16 bytes. El hardware puede producir un error y reiniciarse si los búferes no están alineados a 16 bytes. XDspStatus.result indicará XDSP_E_DEVICE_FATAL_ERROR cuando el hardware haya sufrido un bloqueo o cuelgue.
- La respuesta al impulso debe estar en el dominio de la frecuencia. Se proporciona una herramienta para convertir las respuestas al impulso del dominio del tiempo al dominio de la frecuencia. Descárguela desde https://aka.ms/gdkdl.
- La herramienta de conversión de respuesta al impulso ahora incluye compatibilidad con la reducción, lo que le permite cambiar una reducción de la calidad por un mayor rendimiento. Consulte Información general sobre la reducción de la respuesta al impulso de XDSP para obtener más detalles.
- Se han realizado mejoras en la latencia de la llamada a XDspConnect.
Problemas conocidos
- La opción “EnablePolarFormat” en XDspActivationOptions para el procesamiento de FFT/IFFT tarda un tiempo considerable en comparación con el formato cartesiano predeterminado, que es más eficiente.
Procedimientos recomendados
- Habrá una respuesta por cada comando enviado al hardware, incluso cuando el hardware sufra un error. El llamador debe esperar a que el hardware procese todos los comandos antes de llamar a XDspDeactivate para desactivar la secuencia. XDspStatus.lastProcessedCommandSequence muestra el número de secuencia del último comando procesado por el hardware para esta secuencia. Las demás secuencias de XDSP no se verán afectadas y el hardware seguirá procesando sus comandos.
- El “baseBuffer” que se pasa a la llamada a XDspConnect no se debe liberar hasta que todas las secuencias se desactiven mediante XDspDeactivate y XDspDisconnect se realice correctamente.
- Hay un límite de cola interno para cada secuencia y XDspSubmitCommand devuelve XDSP_E_QUEUE_FULL cuando se alcanza este límite. Cuando se produzca este error, deje tiempo suficiente para que el hardware procese los comandos de esta secuencia antes de enviar más comandos. XDspStatus.lastProcessedCommandSequence se puede usar para comprobar el último comando que el hardware procesó para esta secuencia.
- El rendimiento de la convolución es mejor con un tamaño de bloque de 1024 en comparación con un tamaño de bloque de 512.
- El algoritmo de convolución no es homogéneo en lo que respecta al procesamiento de comandos consecutivos, es decir, no todos los bloques tardan lo mismo en completarse y algunos pueden tardar más que otros.
Pausar y reanudar un título
Un título debe poder pausarse y reanudarse, por ejemplo, cuando el usuario lo pone en modo restringido. Cuando se llame al controlador de suspensión, simplemente deje de enviar comandos XDSP al hardware. Los comandos que ya se habían enviado se procesarán con normalidad y el XDspStatus se actualizará en consecuencia.Ejemplos
- Disponibles para su descarga desde https://aka.ms/gdkdl y desde los ejemplos de ATG. Hay tutoriales de ejemplo disponibles para Reverberación por convolución de secuencia única y FFT IFFT de secuencia única
- Junto con el resto de los ejemplos del portal de descargas del GDK https://aka.ms/gdkdl, se incluye un ejemplo de XDSP que usa el acelerador de hardware para convertir una respuesta al impulso del dominio del tiempo al dominio de la frecuencia. Este ejemplo produce exactamente la misma salida que la herramienta Impulse Response Transform incluida con la instalación del GDK. Este ejemplo muestra cómo se puede usar la aceleración de hardware para convertir una respuesta al impulso sobre la marcha para usarla con la API XDSP.
