> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Información general sobre XAPU

> API de la unidad de procesamiento de audio de XBOX (XAPU) para la descodificación de Opus acelerada por hardware y la conversión de frecuencia de muestreo de alta calidad en XBOX Series X|S.

Este tema proporciona información general sobre las [API de XAPU](/reference/audio/xapu/xapu_members) para la descodificación de archivos Opus acelerada por hardware y la conversión de frecuencia de muestreo de alta calidad.

## Características de la versión de descodificación por hardware de Opus

Históricamente, XMA era la única oferta en la familia de consolas XBOX One que ofrecía descodificación con descarga por hardware. Ahora, en la generación de consolas XBOX Series X|S, presentamos la descodificación con descarga por hardware de Opus a través de la API XAPU (unidad de procesamiento de audio de XBOX).
Opus es un códec de compresión de audio sin regalías diseñado para codificar de forma eficiente voz y audio general en un único formato. Opus es de baja latencia. En evaluaciones internas, Opus supera a XMA en calidad y en relación de compresión del tamaño de archivo.

Además, se ha agregado un convertidor de frecuencia de muestreo de alta calidad (HSRC) para funcionar junto con la funcionalidad de descodificación por hardware (Opus). Al combinar la descodificación con descarga por hardware de Opus con la característica HSRC para cambiar el tono, los desarrolladores notarán una calidad de salida mejorada con respecto a la oferta SHAPE de la generación anterior. (Sigue siendo compatible en las consolas XBOX Series X|S por compatibilidad con versiones anteriores).

### Novedades de esta versión

* Novedad con June FAL QFE3: para los escenarios de Quick Resume, ya no es necesario que los títulos restablezcan su conexión con el hardware después de una reanudación.
* Novedad con June FAL QFE4: ahora se admiten paquetes Opus de 2,5 y 5 ms de longitud para CELT.
* Versión de recuperación de August 2020 Preview 10.0.19041.4124 (rs\_xbox\_release\_2008- 19041.4124.200814-0000) / 10.0.19041.3562 (rs\_xbox\_release\_sirius- 19041.3562.200814-2300) o superior: cambio importante en la implementación de [XApuDecodeConvertCommand](/reference/audio/xapu/structs/xapudecodeconvertcommand): ahora los datos residuales al usar firstFrameIndex no se incluyen, cuando antes sí se incluían. Consulte la sección de procedimientos recomendados o la página de referencia de la API [XApuDecodeConvertCommand](/reference/audio/xapu/structs/xapudecodeconvertcommand) para obtener más detalles.
* Si el búfer de procesamiento de salida de HSRC contiene datos y se usa el comando de vaciado, anteriormente se producía una pérdida de datos (podía perder algunos datos de audio convertidos y la salida no era la esperada)
* Si se envían paquetes Opus no compatibles para su procesamiento, ahora se produce un error en lugar de un bloqueo. (Por ejemplo, enviar un paquete Opus de 2,5 ms cuando solo se admiten 10 ms o 20 ms)
* FIFO está activado de forma predeterminada
* Mejoras generales de rendimiento y correcciones de estabilización

## Especificaciones de la versión de descodificación por hardware de Opus

En la tabla siguiente se describen los comandos y las características disponibles:

| -                  | CELT          | -                | -                | -    | SILK          | -                | -                | -    | Hybrid        | -                | -                | -    | PCM           | -                | -                | -    |
| ------------------ | ------------- | ---------------- | ---------------- | ---- | ------------- | ---------------- | ---------------- | ---- | ------------- | ---------------- | ---------------- | ---- | ------------- | ---------------- | ---------------- | ---- |
| Comandos           | Modo admitido | Búsqueda y bucle | Restablecimiento | HSRC | Modo admitido | Búsqueda y bucle | Restablecimiento | HSRC | Modo admitido | Búsqueda y bucle | Restablecimiento | HSRC | Modo admitido | Búsqueda y bucle | Restablecimiento | HSRC |
| DECODE             | Sí            | Sí               | Sí               | Sí   | Sí            | Sí               | Sí               | Sí   | Sí            | Sí               | Sí               | Sí   |               |                  |                  |      |
| DECODE and CONVERT | Sí            | Sí               | Sí               | Sí   | Sí            | Sí               | Sí               | Sí   | Sí            | Sí               | Sí               | Sí   |               |                  |                  |      |
| CONVERT ONLY       |               |                  |                  |      |               |                  |                  |      |               |                  |                  |      | Sí            | Sí               | Sí               | Sí   |

### Nota importante sobre el uso de HSRC

El convertidor de frecuencia de muestreo de alta calidad (HSRC) tiene un retardo de grupo dependiente de la frecuencia que es de aproximadamente *5 fotogramas* para frecuencias inferiores a 10 kHz.

El retardo esperado en la salida es de *5 fotogramas* cuando el convertidor de frecuencia de muestreo está activado, y el autor de la llamada puede ajustarse en consecuencia. Si usa una solución de middleware para el audio, es posible que este retardo ya esté controlado para su título.

### Procedimientos recomendados

* Con respecto a la implementación de [XApuDecodeConvertCommand](/reference/audio/xapu/structs/xapudecodeconvertcommand): firstFrameIndex pasado a [XApuDecodeConvertCommand](/reference/audio/xapu/structs/xapudecodeconvertcommand) especifica el primer fotograma que se copiará en el búfer de salida PCM. firstFrameIndex, junto con frameCount, especifican lo que se copia en el búfer de salida. Nuestra implementación no incluye los datos residuales al usar firstFrameIndex. Si hay 100 fotogramas residuales, firstFrameIndex se establece en 50 y frameCount se establece en 200, se agregarán 200 fotogramas a todo el residual a partir del fotograma número 50 de los datos descodificados. Esto significa que el búfer de entrada al HSRC tendrá los 100 fotogramas originales del residual seguidos de 200 fotogramas a partir del fotograma número 50 del paquete descodificado actual.
* Se recomienda crear los clientes XAPU con cuidado.  Es mejor crear los clientes XAPU por adelantado (durante la activación de los recursos del motor de audio) y seguir usándolos durante toda la vida útil del juego.  Las llamadas a [XApuConnect](/reference/audio/xapu/functions/xapuconnect) y [XAapuDisconnect](/reference/audio/xapu/functions/xapudisconnect) son costosas desde el punto de vista computacional.  Corre el riesgo de quedarse sin recursos si se crean y eliminan con frecuencia clientes con requisitos de memoria variables.
* Para fines de bucle, corresponde al autor de la llamada usar [XApuCommandType::Reset](/reference/audio/xapu/enums/xapucommandtype) o no, ya que podría causar un efecto transitorio en la salida. Sin embargo, cuando se usa [XApuCommandType::Reset](/reference/audio/xapu/enums/xapucommandtype), se deben enviar paquetes de preprocesamiento (pre-roll) para evitar el efecto transitorio.
* Para obtener el mejor rendimiento, use secuencias Opus codificadas con un tamaño de paquete de 20 ms
* En cuanto al rendimiento, puede ser mejor usar menos clientes con más secuencias en lugar de menos secuencias con más clientes. Por ejemplo, tener 5 clientes con 20 secuencias por cliente, lo que da un total de 100 secuencias, ofrece un mejor rendimiento en comparación con 50 clientes con 2 secuencias cada uno. Ambos se pueden usar para descodificar 100 secuencias, pero el primero tendrá un mejor rendimiento
* OPUS\_SET\_PREDICTION\_DISABLED deshabilita la predicción entre paquetes y es compatible.  La codificación con esta marca reduce el rendimiento de la compresión y, por lo tanto, degrada la calidad de la salida descodificada.
* XAPU devuelve el error [XAPU\_E\_DEVICE\_FATAL](/reference/audio/xapu/enums/xapuerrors) cuando el dispositivo de hardware está en mal estado. Todos los clientes XAPU deben desconectarse en este punto antes de crear nuevos clientes para recuperarse de este error.
* El mecanismo de señalización para la finalización de comandos funciona con un temporizador de 3 ms y envía una señal una vez por todos los comandos completados hasta ese momento para cada cliente XAPU, independientemente de cuántos comandos usaran la marca [XApuCommandOptions::SignalOnCompletion](/reference/audio/xapu/enums/xapucommandoptions).
* Si el título no puede tolerar el mecanismo de señalización de 3 ms, puede buscar respuestas en un bucle o usar Sleep(0) y comprobar las respuestas.
* Es importante esperar todas las respuestas antes de desconectar el cliente. [XApuDisconnect](/reference/audio/xapu/functions/xapudisconnect) ahora devuelve el error [XAPU\_E\_PENDING\_RESULTS](/reference/audio/xapu/enums/xapuerrors) si hay solicitudes pendientes que no se han recogido. Este error no requiere ninguna acción y solo debe usarse durante el tiempo de desarrollo. XApuDisconnect libera todos los recursos asignados para el cliente y, si se le llama mientras el hardware sigue procesando comandos para este cliente, puede producirse daño de memoria, ya que el hardware escribe en memoria que se ha liberado.
* Todos los punteros de memoria pasados al hardware (por ejemplo: inputData, outPutData y processingBuffer) deben estar alineados a 16 bytes.
* Cuando se usan los modos ConvertOnly o DecodeConvert, los tamaños de recuento de fotogramas de salida más grandes darán como resultado un mejor rendimiento. El tamaño de fotograma de salida más alto admitido al usar decode convert y convert es 1024.
* Solo se admite la codificación de velocidad de bits variable (VBR). La codificación de velocidad de bits constante (CBR) no se admite porque agrega paquetes de transición, que son menos eficientes y de peor calidad que los paquetes de redundancia usados en la codificación VBR. Por lo tanto, este tipo de paquete y, por extensión, CBR, no se admiten.
* Para HYBRID y SILK: solo se admiten secuencias Opus mono y estéreo con paquetes de 10 o 20 ms y a una frecuencia de muestreo de 48000 Hz.
* Para CELT: solo se admiten secuencias Opus mono y estéreo con paquetes de 2,5, 5, 10 o 20 ms y a una frecuencia de muestreo de 48000 Hz.

### Pausa y reanudación de 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 XAPU al hardware. Los comandos que ya se enviaron se completarán normalmente y se colocarán en sus colas de respuesta correspondientes.

### Ejemplos (código fuente disponible en un archivo .zip externo; solicítelo enviando un correo electrónico a [AnaAud@microsoft.com](mailto:AnaAud@microsoft.com))

* Decode One Opus Stream. (Información general sobre este ejemplo disponible [aquí](/build/console-features/audio/overviews/xapu-overview-single-stream-audio-decode).)
* Decode Multi-Opus Streams.
* Play One Opus Stream. (El uso de subprocesos es diferente al de "Decode One Opus Stream").
* Play Multi-Opus Streams.
* Decode Convert One Opus Stream con una opción de bucle y búsqueda con precisión de muestra.
* Decode Convert Multi-Opus Streams.
* Play Decode Convert One Opus Stream.
* SimpleXAPU (ejemplo de descodificación de una secuencia Opus dentro de un título del GDK con una interfaz de usuario).

### Contacto

Si tiene preguntas o dudas sobre esta característica, envíe un correo electrónico a [AnaAud@microsoft.com](mailto:AnaAud@microsoft.com) o use los foros en línea.

## Documentación de referencia de la API

* [Xapu (contenido de la API)](/reference/audio/xapu/xapu_members)
  * Funciones
    * [XApuConnect](/reference/audio/xapu/functions/xapuconnect)
    * [XAapuDisconnect](/reference/audio/xapu/functions/xapudisconnect)
  * Estructuras
    * [XApuDecodeConvertCommand](/reference/audio/xapu/structs/xapudecodeconvertcommand)


## Related topics

- [Información general sobre el hardware de audio de XBOX Series X|S](/es/build/console-features/audio/overviews/scarlett-audio.md)
- [Información general sobre discos](/es/publishing/game-publishing/concepts/discs-overview.md)
- [Información general sobre ADPCM](/es/build/console-features/audio/overviews/adpcm-overview.md)
- [Información general sobre gamertags](/es/services/xbox-services/fundamentals/identity/user-profile/gamertags/live-gamertags-overview.md)
- [Información general sobre ACP](/es/build/console-features/audio/overviews/acp-overview.md)
