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.

El diseño basado en dos hilos permite que el procesamiento de audio ocurra de forma determinista sin bloquear la UI ni comprometer la estabilidad del sistema. Las operaciones del grafo se validan en el hilo de control y se ejecutan asíncronamente en el de renderizado.

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.

Cuando un AudioNode recibe varias entradas, ajusta los canales mediante mezcla ascendente o descendente para mantener compatibilidad entre señales. En nodos con tail-time, los cambios de canales se aplican solo cuando la señal anterior deja de influir.

Última actualización