Fundamentos de Arquitectura
Organización del flujo mediante la separación de control/renderizado
I/O se basa en el concepto de contexto de audio o AudioGraph
Un grafo de nodos define el recorrido del sonido desde su fuente de origen—que puede ser, por ejemplo, un archivo de audio— hasta el dispositivo de salida.
A medida que el flujo atraviesa cada nodo, sus propiedades pueden modificarse.
En este esquema, los nodos se representan como bloques y las conexiones como enlaces direccionales, pudiendo existir múltiples entradas y salidas por nodo. De forma predeterminada, si un nodo recibe varias conexiones, I/O suma todas las señales recibidas.
Hilos
Los sistemas de audio de baja latencia suelen implementarse mediante funciones de callback, en las que el sistema operativo invoca al programa cada vez que es necesario generar audio para que la reproducción continúe sin interrupciones.
La ejecución ocurre en un hilo de alta prioridad, cruzar los límites o añadir almacenamiento intermedio inevitablemente introduce latencia y menor toleracia a fallos.
I/O se implementa utilizando un hilo de control y un hilo de renderizado.
El hilo de control es aquel desde el que se instancia el AudioGraph y en el que los desarrolladores manipulan el grafo, invocando operaciones. El hilo de control utiliza un event loop mientras que el hilo de renderizado emplea un bucle especializado, donde se calcula la salida de audio en respuesta a las acciones realizadas desde el hilo de control.
La comunicación entre hilos se realiza mediante mensajes de control, mientras que en la dirección contraria se lleva a cabo mediante tareas regulares del event loop.
Automatizaciones
Una de las principales fortalezas de I/O es que incorpora un modelo de temporización de baja latencia. La temporización permite programar eventos para que ocurran en momentos específicos del futuro, lo cual resulta útil en escenas y en aplicaciones espaciales.
Una de las funciones que ofrece el contexto de audio en I/O es un modelo de temporización consistente y un marco de referencia temporal propio.
Operaciones
En I/O, las operaciones sobre un AudioNode se dividen en dos fases:
Una síncrona, que se ejecuta en el hilo de control para cambio de parámetros.
Una asíncrona, que se realiza en el hilo de renderizado mediante un mensaje encolado.
Esto garantiza seguridad al modificar parámetros o estados sin bloquear el procesamiento. Si una operación A se invoca antes que una B, tanto sus fases síncronas como asíncronas deben ejecutarse en el mismo orden, evitando cualquier reordenamiento.
Nodos
Los nodos pueden clasificarse básicamente en tres categorías.
Los nodos fuente (Renderer) abarcan elementos como búferes de audio, entradas en vivo y osciladores, por otra parte, los nodos de procesamiento incluyen filtros, convolvers, panners y otros efectos; los nodos de análisis engloban analizadores.
Aunque el nodo destino final suele ser un sistema de reproducción como los altavoces, I/O también permite procesar audio sin reproducirlo —por ejemplo, visualización o procesamiento offline, donde el flujo de audio se guarda en un búfer para su uso posterior.
La salida de cualquier nodo en I/O puede conectarse a la entrada de otro nodo.
En entornos interactivos, múltiples fuentes se combinan para conformar la mezcla final. Estas pueden incluir música de fondo, efectos, señales de retroalimentación de UI, etc. Una vez establecido el grafo, éste puede modificarse de forma dinámica.
I/O ofrece control independiente sobre canal, así como sobre el conjunto completo.
Última actualización