- Realiza de forma eficiente funciones de audio de uso común mediante bloques de hardware de función fija: XMA, convertidor de frecuencia de muestreo (SRC), ecualizador y compresión, y filtro/volumen
- Proporciona un procesador de control de audio (ACP) integrado y programable para controlar estos bloques
- Un proceso de acceso directo a memoria (DMA) para acceder a la memoria del sistema
- Memoria interna especial, denominada búferes de mezcla Un búfer de mezcla es un bloque de memoria que almacena un fotograma de audio completo de datos. El hardware SHAPE normalmente lee de uno o dos búferes de mezcla y escribe en un búfer de mezcla de salida. Hay algunas excepciones a este proceso general, como la descodificación XMA y los bloques DMA y SRC.
XAudio2 y el middleware de audio implementan los componentes SHAPE de forma implícita. Sin embargo, construir grafos de flujo proporciona la mayor flexibilidad y acceso a las capacidades de aceleración de audio de la consola XBOX One.
Este tema proporciona información general sobre el hardware SHAPE y los bloques de funciones.
- Flujo de control
- DMA
- XMA
- PCM
- Bloque del convertidor de frecuencia de muestreo (SRC)
- Ecualización y compresión
- Bloque de filtro/volumen (FLTVOL)
- Búferes de mezcla
- Desbordamiento, magnitud y saturación
- Colas de SHAPE
- Consideraciones de programación
Flujo de control
El siguiente es un flujo de control típico para el procesamiento de audio.- Se carga un archivo de datos de audio XMA comprimido en la memoria principal del sistema.
- El bloque descodificador XMA descodifica una parte de los datos XMA en datos de modulación por impulsos codificados (PCM). Esto almacena la salida en un búfer de descodificación XMA en la memoria del sistema.
- El bloque SRC lee las muestras PCM del búfer de descodificación XMA y realiza la conversión de frecuencia de muestreo y el cambio de tono necesarios. Esto permite introducir datos de audio con una frecuencia de muestreo arbitraria en los bloques aceleradores de SHAPE. El bloque SRC genera datos de audio a la frecuencia fija de 48 KHz en un búfer de mezcla interno.
- Ahora se realiza cualquier procesamiento SHAPE adicional y la lectura y escritura en búferes de mezcla temporales. El procesamiento lo controla el ACP, que a su vez es dirigido por la aplicación a través de la API de ACP que se describe en este conjunto de documentación. El procesamiento incluye ecualización, compresión, escalado de filtro y escalado de volumen.
- La fase final, denominada acumulación de salida de altavoces, es donde los búferes de mezcla de altavoces recopilan y mezclan las muestras de varias fuentes de sonido para su reproducción. En esta fase se pueden procesar efectos de audio globales opcionales.
- Se carga un archivo de datos de audio XMA comprimido en la memoria principal del sistema.
- El bloque descodificador XMA descodifica una parte de los datos XMA en datos PCM y almacena la salida en un búfer de descodificación XMA en la memoria del sistema.
- El bloque SRC lee las muestras PCM del búfer de descodificación XMA y realiza la conversión de frecuencia de muestreo y el cambio de tono necesarios. Esto permite introducir datos de audio con una frecuencia de muestreo arbitraria en los bloques aceleradores de SHAPE. El bloque SRC genera datos de audio a la frecuencia fija de 48 KHz en un búfer de mezcla interno.
- En este paso, el flujo del proceso diverge. El sistema DMA se usa para transferir uno o varios búferes de mezcla a la memoria principal del sistema.
- La CPU de la aplicación realiza el procesamiento de señales necesario en el búfer de la memoria principal.
- El sistema DMA se usa para transferir los datos de audio procesados desde el búfer de memoria principal a un búfer de mezcla temporal. Después de este paso, el proceso es idéntico al descrito anteriormente.
- Ahora se realiza cualquier procesamiento SHAPE adicional y la lectura y escritura en búferes de mezcla temporales. El procesamiento lo controla el ACP, que a su vez es dirigido por la aplicación a través de la API de ACP descrita en este conjunto de documentación. El procesamiento incluye ecualización, compresión, escalado de filtro y escalado de volumen.
- La fase final, la acumulación de salida de altavoces, es donde los búferes de mezcla de altavoces recopilan y mezclan las muestras de varias fuentes de sonido para su reproducción. En esta fase se pueden procesar efectos de audio globales opcionales.
DMA
El sistema de acceso directo a memoria (DMA) admite funcionalidad de lectura/escritura con conversión automática de float a entero y de entero a float. El sistema DMA usa búferes circulares que contienen muestras desentrelazadas en bloques de 128 muestras. El procesador DMA permite al motor SHAPE enviar datos desde los búferes de mezcla a la memoria principal del sistema y recuperar datos de la memoria principal del sistema en los búferes de mezcla, para su procesamiento posterior. El DMA se realiza por bloques. Se transfiere un fotograma de audio de datos a la vez. Para facilitar los datos entrelazados por bloques, un valor de salto especifica el número de bloques de fotogramas de audio en la memoria del sistema que se deben omitir (desde la dirección base) al leer o escribir muestras. Por este motivo, las secuencias multicanal requieren un contexto DMA por canal. Las muestras de datos de audio siempre se leen y escriben como valores de 32 bits, ya sea como enteros o como floats, y según lo especificado en la marcaFloatConvert del contexto DMA. Para ayudar a reducir el ancho de banda de datos, la dirección del DMA (lectura o escritura) se especifica en el comando DMA en lugar de en el contexto DMA. El motor DMA no realiza procesamiento de señales, pero puede convertir floats en enteros y enteros en floats. Esto permite a la CPU de la aplicación procesar muestras de datos en formato de punto flotante.
Para calcular el tamaño de un búfer DMA, use la fórmula siguiente.
XMA
El formato XMA admite sonido mono, estéreo y multicanal entrelazado con velocidades de bits y compresión variables. Se han realizado varias mejoras con respecto a la implementación de XMA de XBOX 360, incluido un aumento de la frecuencia de reloj (con una mejora del 40 por ciento en las capacidades de cambio de tono, por ejemplo) y un aumento del número de voces de 320 a 512. El bloque descodificador XMA descodifica una parte de los datos XMA en la memoria principal y devuelve los datos PCM a un búfer de descodificación XMA en la memoria principal. El bloque descodificador XMA es idéntico al bloque descodificador XMA de XBOX 360, salvo por pequeñas mejoras relacionadas con el estado para interactuar con otros componentes de SHAPE. El bloque de registros del descodificador XMA se ha ampliado con la información de estado relacionada con la salida descodificada de cada voz. Cinco bits por contexto XMA especifican la cantidad de datos de audio que quedan sin consumir en el búfer de salida PCM. Estos registros se implementan dentro del bloque descodificador XMA. Esto hace que siempre estén disponibles para determinar si hay suficientes muestras para bloquear el contexto para el SRC sin leer la memoria principal.xWMA no es compatible con SHAPE, pero sí mediante
XAudio2.PCM
La modulación por impulsos codificados (PCM) lineal admite hasta sonido envolvente 7.1 a 48 KHz. El ACP realizará una mezcla de reducción si el sistema de sonido del usuario es, por ejemplo, sonido envolvente 5.1 o estéreo. Se admitirá la salida S/PDIF. También hay compatibilidad con búferes PCM lineales y circulares que contienen enteros de 16 bits mono o estéreo, floats mono de 32 bits o enteros mono de 32 bits (24 bits justificados a la izquierda, o 32 bits con los 8 bits inferiores enmascarados).Bloque del convertidor de frecuencia de muestreo (SRC)
El bloque SRC realiza la conversión de frecuencia de muestreo basada en enteros y escribe los datos de salida en los búferes de mezcla. El SRC se usa normalmente para la emulación de instrumentos musicales, la conversión de muestras de entrada a una octava más baja o más alta que la de la fuente, y para efectos Doppler y de otro tipo. Desde la memoria del sistema, el bloque SRC lee datos PCM de punto flotante de 32 bits o datos de punto fijo de 16, 24 o 32 bits. Como datos de entrada, el bloque puede tomar la salida del descodificador de hardware XMA o los datos mantenidos por software. Dado que está estrechamente integrado con el descodificador XMA, el bloque SRC puede determinar si el número de muestras de datos PCM descodificados en el búfer de descodificación XMA es suficiente para crear y completar un fotograma de audio de muestras sin leer la memoria principal. El SRC funciona en modo mono o estéreo. Los datos PCM se leen de la memoria y se convierten a un formato común de punto fijo de 24 bits para la conversión de frecuencia de muestreo. La salida se escribe en uno o dos búferes de mezcla, según el modo. Los datos estéreo se almacenan en memoria como una secuencia entrelazada de datos de 16 bits. El canal izquierdo está en los 16 bits menos significativos de cada palabra de 32 bits, y el canal derecho en los 16 bits más significativos. Además, en modo estéreo, los datos PCM se leen y desentrelazan simultáneamente. Los datos del canal izquierdo (muestras 0,2,4,6…) se procesan y se envían a un búfer de mezcla. Los datos del canal derecho (muestras 1,3,5,7…) se escriben en un segundo búfer de mezcla. La figura 3 muestra los modos de conversión de frecuencia de muestreo. Figura 3. Modos de conversión de frecuencia de muestreo. La entrada del bloque SRC puede estar a cualquier frecuencia de muestreo que no supere 384 KHz menos épsilon. Sin embargo, la salida estará a una frecuencia constante de 48 KHz. Épsilon es la pequeña diferencia entre los valores enteros solicitados y los valores de punto flotante que usa el hardware. SHAPE puede procesar hasta 512 canales (cualquier combinación de mono y estéreo) de SRC por fotograma de audio. El SRC admite interpolación lineal y polifásica, mono y estéreo, y un intervalo de remuestreo desde 1:16, o cuatro octavas hacia abajo, hasta 3,99:1, o casi dos octavas hacia arriba.Ecualización y compresión
El compresor limita el rango dinámico de la señal supervisando el nivel de entrada y creando un valor de ganancia dinámico. A continuación, el compresor usa el valor de ganancia como multiplicador de la señal, escalándola apropiadamente según el nivel actual de la señal de entrada. En otras palabras, el compresor es un control de volumen automático que supervisa constantemente la señal de entrada y se ajusta a sí mismo. El compresor actúa solo sobre las señales que superan un umbral específico. Las señales por debajo del umbral pasan sin alteraciones. La aplicación establece el umbral como parte de los datos de contexto de EQComp. Se usa un control programable en el contexto para realizar la compresión o la expansión. El compresor altera los datos de sonido según un parámetro que especifica la relación entre el nivel de entrada y el nivel de salida. La relación representa el grado de atenuación que se debe aplicar a la señal entrante si supera el umbral. Algunos ejemplos son los siguientes.- Con 2:1, por cada 2 dB por encima del umbral, el compresor genera 1 dB por encima del nivel del umbral.
- Con 1:1, el compresor está esencialmente desactivado.
attack y release especifican la rapidez con la que se activa el compresor; es decir, cuánto tarda en atenuar por completo, en la cantidad especificada por la relación, los sonidos que superan el umbral. Attack y release se especifican en milisegundos y corresponden a la rapidez con la que el compresor debe variar la ganancia de salida en respuesta a una señal que supera el umbral o cae por debajo de él. Estos ajustes pueden ser lineales o logarítmicos.
El diagrama siguiente (figura 5) muestra cómo el nivel de salida deseado no se alcanza hasta que la entrada ha superado el umbral durante el tiempo especificado por attack. El diagrama también muestra cómo la entrada y la salida vuelven a la unidad solo después de que la entrada esté por debajo del umbral durante el tiempo especificado por release.
Figura 5. La temporización de attack/release.
A continuación, la entrada se multiplica por la ganancia de salida actual. Esa primera multiplicación realiza la compresión propiamente dicha, es decir, el escalado de la señal mediante una función variable en el tiempo según la amplitud de entrada.
Hay un escalado de ganancia adicional, que es el paso final. La ganancia de compensación (makeup gain) es un valor invariable que establece la aplicación. Dado que la compresión, especialmente con umbrales bajos, puede dar como resultado una señal de ganancia relativamente baja, la ganancia de compensación se usa para devolver la señal a un rango utilizable.
Un parámetro adicional del compresor es RMS. En modo normal, el nivel de entrada es instantáneo y se calcula para cada muestra. En modo RMS, se mantiene un promedio móvil (una aproximación del valor RMS) sobre las 128 muestras anteriores. El promedio móvil se usa como nivel de entrada en lugar del nivel absoluto de la muestra de entrada actual.
El bloque EQ/compresor-expansor contiene dos unidades de procesamiento independientes en serie: un ecualizador programable de tres bandas y un compresor de rango dinámico (figura 6). El bloque se usa para controlar la frecuencia y el rango dinámico de los sonidos, y toma la entrada de uno o dos búferes de mezcla.
- Una entrada es la señal de audio que se va a procesar.
- La segunda entrada, denominada sidechain, es la señal de control opcional que se usa para determinar la compresión de audio.
- En el modo normal (figura 7), hay una única entrada de audio desde un búfer de mezcla. La entrada pasa por el ecualizador, donde posteriormente la procesa el compresor y se envía a un búfer de mezcla. Figura 7. Modo normal.
- En el modo interno (figura 8), la señal de entrada se introduce directamente en la entrada de audio del compresor, y se divide y se envía al ecualizador. Desde el ecualizador, se envía a la entrada de sidechain del compresor. Figura 8. Modo interno.
- En el modo externo (figura 9), se usan dos señales de entrada independientes procedentes de dos búferes de mezcla independientes. La señal de entrada pasa por el ecualizador y llega a la entrada de audio del bloque de compresión. La señal de entrada de sidechain se introduce directamente en la entrada de sidechain del compresor. Figura 9. Modo externo.
Bloque de filtro/volumen (FLTVOL)
FLTVOL se usa para hacer lo siguiente:- Modelar la oclusión de los sonidos que rodean o atraviesan un objeto
- Distribuir la energía del sonido a varios altavoces, para modelar la dirección desde la que llega el sonido.
f y q los calcula el software fuera del bloque SHAPE. Cuando se actualiza un coeficiente, se aplica una rampa hasta el nuevo valor a lo largo de un fotograma de audio. Se usan bits de control para determinar qué salida (rechazo de banda, paso alto, paso banda o paso bajo) se usará como salida final del bloque FLTVOL.
Los datos de contexto de cada canal o secuencia se almacenan en la memoria del sistema. Aunque el rendimiento está limitado a 2560 secuencias simultáneas de 48 KHz (lo que significa que SHAPE puede procesar hasta 2560 contextos FLTVOL por fotograma de audio), el número de contextos direccionables en memoria es mayor, para simplificar los escenarios de reutilización de secuencias.
El comportamiento de filtrado está diseñado para ser idéntico al de XAudio2.
Búferes de mezcla
Los búferes de mezcla cumplen tres propósitos principales.- Los búferes de mezcla actúan como destino de mezcla final para cada salida de altavoz del sistema (o de un jugador individual). Cuando se procesa cada sonido, su salida posterior se mezcla en estos búferes.
- Los búferes de mezcla actúan como ubicaciones de almacenamiento temporal cuando se pasan búferes de datos de audio entre bloques de hardware.
- Junto con el motor DMA, los búferes de mezcla sirven como mecanismo para pasar datos desde el hardware SHAPE y el subsistema de audio hasta el sistema principal, así como para pasar datos desde la memoria principal del sistema de vuelta al hardware SHAPE y al subsistema de audio.
Desbordamiento, magnitud y saturación
En un motor de audio de un título, administrar el margen (headroom) puede ser muy difícil. Por esta razón, cada bloque SHAPE mantiene el estado asociado con el margen y la ganancia de la señal. Cada bloque, excepto el SRC, mantiene una marca que indica si se ha producido saturación interna durante el procesamiento. Además de la marca de saturación interna, cada bloque de hardware también mantiene dos números de cuatro bits que representan la magnitud de la salida del bloque de hardware. La magnitud se calcula determinando el pico de salida durante el fotograma de audio y contando los ceros iniciales del valor absoluto del pico. Un número de cuatro bits se mantiene con la magnitud de pico persistente, y el otro lo restablece el hardware en cada fotograma de audio. Además de supervisar la magnitud de pico de cada bloque de hardware individual, también se mantiene la magnitud de pico de los búferes de mezcla. Cuando la salida de un bloque de hardware se agrega a un búfer de mezcla, la magnitud de pico se calcula de la misma manera: contando los ceros iniciales. El estado de cada bloque de hardware mantiene un par adicional de valores de magnitud de pico de cuatro bits. Estos valores representan la magnitud de pico del búfer de mezcla después de que la salida del bloque de hardware se haya acumulado en el búfer de mezcla. Un número de cuatro bits representa la magnitud de pico continua y persistente. El otro se actualiza en cada fotograma de audio. Los valores de magnitud de pico se guardan en el contexto de los bloques SHAPE, aunque lo que se representa es el estado del búfer de mezcla. La magnitud de pico se codifica según la tabla siguiente (codificada en el archivo ShapeHardwareContexts.h).
Para ayudar a administrar el margen y evitar el desbordamiento y la saturación, además de la configuración de ganancia de grano fino, se puede realizar un desplazamiento a la derecha de 0 a 7 bits en la salida de un bloque de hardware antes de la acumulación en el búfer de mezcla de salida. Esto se designa en el contexto de cada bloque de hardware SHAPE.
Colas de SHAPE
El procesador de audio SHAPE administra dos colas que ayudan a reducir los interbloqueos entre el hardware del sistema y el hardware de la aplicación.- La cola de comandos y control (CCQ) se usa para dar al procesador de audio SHAPE una serie de comandos para ejecutar cuando pueda, normalmente cuando termina el procesamiento del fotograma de audio actual. La lista de ejecución de SHAPE se lee una vez por cada fotograma de audio de salida. Sin embargo, la CCQ se leerá y ejecutará solo una vez. La CCQ es el mecanismo para que la CPU actualice los datos de contexto de cualquier bloque en un límite de fotograma de audio sin requerir un interbloqueo de hardware con el hardware SHAPE. Algunos ejemplos de esto incluyen suministrar más datos de flujo de bits para el bloque XMA, actualizar parámetros de contexto para varios bloques y apuntar a una nueva lista de ejecución. Esto se hace normalmente mientras se cambia el grafo de flujo de procesamiento de audio.
- La cola de estado y notificación (SRQ) la usa el procesador de audio SHAPE para notificar a la CPU diversos eventos que no requieren respuestas en tiempo real. Algunos ejemplos incluyen la actualización del consumo del búfer de flujo de bits, errores, advertencias y marcas, datos de depuración, datos de rendimiento e información de estado.
Consideraciones de programación
La programación directa sobre el hardware SHAPE se habilita a través de la interfazIACPHAL. Sin embargo, el proceso de preparar los datos de audio para el hardware SHAPE es complejo. Se proporcionan muchos métodos, estructuras y enumeraciones de utilidad. Estas utilidades proporcionan todos o la mayoría de los métodos necesarios para controlar el hardware SHAPE. El Microsoft Game Development Kit (GDK) incluye el código fuente de estas utilidades para los casos poco frecuentes en los que sea necesario modificar el código para controlar ciertos tipos de datos.
El único archivo de encabezado que debe incluirse explícitamente en el proyecto es acphal.h, que hace referencia a todos los archivos de encabezado de utilidades. Todas las funciones de utilidad hacen referencia a la macro NO_SHAPE_CONTEXT_VALIDATION. Si esta macro está definida, se omitirán todas las validaciones. Esto será útil para las compilaciones comerciales finales.
Para obtener más detalles sobre el uso compartido de recursos SHAPE y XMA con instancias de XAudio2, consulte la sección de comentarios de la función XAudio2Create.
Para obtener más detalles sobre todos los métodos de utilidad, consulte Información general sobre ACP.
Grafos de flujo persistentes y no persistentes
Puede enviar grafos de flujo para su procesamiento como persistentes o no persistentes. Los grafos de flujo persistentes se procesan y permanecen residentes de modo que su procesamiento se repite en el fotograma siguiente después de que los punteros de lectura y escritura hayan avanzado y después de que se actualice otra información de contexto. Use grafos de flujo persistentes para cualquiera de los escenarios siguientes.- Grafos de flujo muy complejos, que requieren una cantidad significativa de procesamiento de CPU para volver a ensamblar cada fotograma
- Grafos de flujo muy estáticos, que tienen el mismo número y configuración de voces durante un período prolongado
- Las topologías de voces cambian con frecuencia.
- La cadencia de procesamiento del motor de software de audio de su título está desacoplada del hardware SHAPE; es decir, no es un múltiplo de 2,667 ms.
- Desea ejecutar el procesamiento de audio más rápido que en tiempo real, enviando grafos para que se consuman tan pronto como estén disponibles.
Depuración de problemas
Cuando desarrolle grafos de flujo, registrarse para recibir mensajes le ayudará a depurar los problemas que puedan surgir. En concreto, use el parámetroNumMessages de Connect. El sistema de mensajería proporciona información detallada sobre diversos problemas, incluidos los grafos de flujo no válidos (ACP_FLOWGRAPH_TERMINATED_REASON_INVALID_GRAPH), los comandos bloqueados y los desbordamientos de fotograma que se producen cuando se intenta realizar más procesamiento del que permite el tamaño de fotograma del hardware de 2,667 ms. Antes de publicar un título, compruebe que el procesamiento de los grafos de flujo se realiza correctamente de forma sistemática observando los mensajes ACP_MESSAGE_TYPE_FLOWGRAPH_COMPLETED de cada grafo de flujo enviado.
Mensajes perdidos
Si usa mensajes ACP para dirigir el estado del motor, y si controla muchos mensajes, debe examinar el campodroppedMessageCount de ACP_MESSAGE durante el desarrollo. Un valor distinto de cero en el campo indica que la cola de mensajes estaba llena y hubo que descartar mensajes. En este escenario, considere la posibilidad de dar servicio a la cola más rápido y de hacerla más grande.
Desbordamientos de fotograma
Hay muchas razones por las que un grafo de flujo podría no completarse antes de que se alcance el final de un fotograma de audio (2,667 ms), por ejemplo, el procesamiento de demasiados grafos de flujo o el procesamiento de un grafo de flujo mal estructurado. Este grafo de flujo incompleto dará como resultado un mensajeACP_FLOWGRAPH_TERMINATED_TIME_EXCEEDED para los grafos de flujo persistentes, y estos grafos de flujo persistentes quedarán incompletos. Por el contrario, un grafo de flujo no persistente no está restringido de esta manera y se ejecutará hasta completarse, incluso a lo largo de varios fotogramas.
Comandos bloqueados
Los comandos SRC y DMA pueden notificarse como bloqueados (ACP_MESSAGE_TYPE_SRC_BLOCKED, ACP_MESSAGE_TYPE_DMA_BLOCKED) en varios escenarios, como se muestra en la tabla siguiente.
| Tipo de comando| Escenario de bloqueo|
| --- | --- | --- | --- |
| XMA SRC| El contexto XMA asociado tiene un error del analizador o no tiene datos de origen. El error es SHAPE_XMA_ERROR_STATUS_READ_BUFFER_INVALID_VALIDBUFFER_CURRBUF_IS_0 | SHAPE_XMA_ERROR_STATUS_FRAME_CROSSES_BOUNDARY_INTO_INVALID_READ_BUFFER_VALIDBUFFER_CURRBUF_IS_0 | SHAPE_XMA_ERROR_STATUS_FRAME_CROSSES_BOTH_READ_BUFFER_BOUNDARIES. XMA SRC no se bloqueará por falta de datos descodificados.|
| PCM SRC| El contexto PCM asociado es SHAPE_PCM_MODE_CIRCULAR y no hay datos de origen.|
| Lectura (DMA desde el búfer de mezcla)| El búfer DMA está lleno.|
| Escritura (DMA hacia el búfer de mezcla)| El búfer DMA está vacío.|
Una vez que se determina que los comandos están bloqueados (lo que ocurre tanto antes de agregarlos a una cola de SHAPE para su procesamiento como en tiempo de ejecución), se eliminan del grafo, lo que puede provocar pérdida de audio. Durante el desarrollo, use los comandos bloqueados como el primer lugar donde buscar mejoras en el manejo de los grafos de flujo. Además, antes de publicar, asegúrese de que su título evita por completo que los comandos se bloqueen.
Puede evitar el bloqueo de los comandos DMA asegurándose de que el búfer de audio sea lo suficientemente grande y de que los datos se transmitan a intervalos regulares en relación con el tamaño del búfer. Por ejemplo, si está transmitiendo cuatro fotogramas de hardware a la vez, asegúrese de que haya algún múltiplo de esos fotogramas (al menos con doble búfer, es decir, ocho) en el búfer para que el hardware pueda escribir por delante del puntero de lectura del título. Como alternativa, podría exigir el vaciado del búfer antes de enviar el siguiente grafo de flujo: consumir, actualizar el puntero de lectura del DMA y, a continuación, enviar el grafo de flujo.
Los comandos SRC tienen tres modos.
SHAPE_SRC_COMMAND_TYPE_STARTse usa para casi todos los comandos SRC de un grafo de flujo. Realice el procesamiento normal y espere que más datos de audio sigan al grafo de flujo actual.SHAPE_SRC_COMMAND_TYPE_STOP_IMMEDIATEse usa para detener inmediatamente el procesamiento de los datos XMA o PCM de origen. El SRC generará un búfer a cero para este fotograma.SHAPE_SRC_COMMAND_TYPE_STOP_ENDse usa para indicar el último paquete de una voz.
STOP_END o STOP_IMMEDIATE, el comando SRC no se completará, lo que hará que el grafo de flujo activo se detenga. Un grafo de flujo persistente terminará al final del fotograma de audio, y un grafo de flujo no persistente nunca se completará.
Problemas de sincronización
Pueden surgir problemas de sincronización si no se respetan las prácticas de consumo de contextos y comandos del hardware SHAPE. Aunque sus títulos conservan acceso completo a la memoria asignada por el ACP, tenga cuidado de no modificar una estructura de contexto mientras esté en uso. Puede usar SubmitCommand para enviar comandos que se produzcan en un fotograma específico, al principio del fotograma siguiente o lo antes posible.El escenario “lo antes posible” sigue siendo asincrónico con respecto a cualquier procesamiento de la CPU del título. Es posible que algunos comandos no se completen inmediatamente, por ejemplo, si un contexto está en medio de una operación no interrumpible. Espere un
ACP_MESSAGE_TYPE_COMMAND_COMPLETED para comprobar que un comando se ha procesado realmente.