> For the complete documentation index, see [llms.txt](https://docs.comdigis.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.comdigis.com/i-o/fundamentos-de-arquitectura.md).

# Fundamentos de Arquitectura

**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.&#x20;

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.&#x20;

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*.&#x20;

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.&#x20;

#### 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.&#x20;

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.

{% hint style="info" %}
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*.
{% endhint %}

#### **Operaciones**

En **I/O**, las operaciones sobre un `AudioNode` se dividen en dos fases:&#x20;

* 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.&#x20;

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*.&#x20;

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, et&#x63;**.** 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.&#x20;

{% hint style="info" %}
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.&#x20;
{% endhint %}
