# Introducción

Gracias por tu interés, éste documento está pensado para acompañarte paso a paso en la comprensión y el uso de nuestro entorno de desarrollo multiplataforma.

Por su naturaleza, **I/O** proporciona un conjunto completo de herramientas para insertar fuentes de audio, aplicar efectos, generar visualizaciones y más, todas éstas operaciones se ejecutan dentro de un contexto, concebido para permitir un enrutamiento dinámico y modular.

Las operaciones se realizan mediante **nodos**, que se enlazan para conformar un **grafo de procesamiento**. Estos nodos se organizan en cadenas simples o redes complejas, conectando sus entradas y salidas para establecer flujos personalizados.

El procesamiento comienza con una fuente que entrega muestras en intervalos de tiempo extremadamente pequeños —*a menudo decenas de miles por segundo*—. La salida de cada nodo puede enviarse a otros que procesan la señal, permitiendo rutas sofisticadas.

#### Comenzando con I/O

Accede rápidamente a los contenidos esenciales para dar tus primeros pasos.

{% hint style="info" %}
Introducción a la arquitectura y el flujo de procesamiento.
{% endhint %}

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><strong>Fundamentos</strong></td><td><a href="https://4056083014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl91JkbFLHxUtJSPZWNOl%2Fuploads%2Fg1BSmLJmaPLGX1Hw1vK5%2Fhorizontal.png?alt=media&#x26;token=be64e464-044f-4dfb-a175-265dbc98207c">horizontal.png</a></td><td><a href="fundamentos/conceptos-fundamentales">conceptos-fundamentales</a></td></tr><tr><td align="center"><strong>Implementación</strong></td><td><a href="https://4056083014-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl91JkbFLHxUtJSPZWNOl%2Fuploads%2Fg1BSmLJmaPLGX1Hw1vK5%2Fhorizontal.png?alt=media&#x26;token=be64e464-044f-4dfb-a175-265dbc98207c">horizontal.png</a></td><td><a href="i-o/introduccion">introduccion</a></td></tr></tbody></table>

#### Comparativa

La plataforma está disponible en dos ediciones:&#x20;

La versión **comunitaria** está orientada a la *exploración, aprendizaje y prototipado*, ofreciendo un conjunto reducido de capacidades que permiten experimentar con audio binaural.

Por su parte, la versión **profesional** incorpora todo el potencial: enrutamiento avanzado, nodos ilimitados y especializados, herramientas de análisis, soporte y mas.

{% hint style="success" %}
Cada edición comparte el mismo núcleo, pero se diferencian en *alcance, capacidades y nivel de soporte*. La siguiente tabla ofrece una vista clara de lo que incluye cada una.
{% endhint %}

<table data-full-width="false"><thead><tr><th width="341">Plan</th><th>Comunidad</th><th>Profesional</th></tr></thead><tbody><tr><td>Reproducción de fuentes</td><td>✔️</td><td>✔️</td></tr><tr><td>Enrutamiento basado en nodos</td><td>✔️</td><td>✔️</td></tr><tr><td>Límite de nodos</td><td>✔️ Máx. 10 <strong>nodos</strong></td><td>✔️ Nodos <strong>ilimitados</strong></td></tr><tr><td>Motor modular de grafo</td><td>✔️</td><td>✔️</td></tr><tr><td>Procesamiento de baja latencia</td><td>✔️</td><td>✔️</td></tr><tr><td>Renderizado en tiempo real</td><td>✔️</td><td>✔️</td></tr><tr><td>Audio binaural</td><td>✔️</td><td>✔️</td></tr><tr><td>Soporte Multiplataforma</td><td>✔️</td><td>✔️</td></tr><tr><td>Nodos de FX (EQ, Reverb, Delay)</td><td>—</td><td>✔️</td></tr><tr><td>Visualización de señales</td><td>—</td><td>✔️</td></tr><tr><td>Cadenas complejas y subgrafos</td><td>—</td><td>✔️</td></tr><tr><td><strong>Soporte técnico</strong></td><td>— <em>Comunidad</em></td><td>✔️</td></tr></tbody></table>

#### **Introducción a la guía**

Esta guía describe el propósito, las capacidades y los componentes fundamentales.

Asimismo, examina su arquitectura y el flujo interno de procesamiento de señal, explicando cómo cada subsistema —desde las **fuentes** y **nodos** hasta el contexto de ejecución— colabora de manera sincronizada para garantizar un comportamiento *determinista*, preciso y estable en entornos de procesamiento de audio en tiempo real.

> **I/O** está construido íntegramente en **Swift**, un lenguaje multiplataforma que combina rendimiento con sintaxis moderna. Ofreciendo un modelo de ejecución optimizado gracias a su compilador **LLVM**, capaz de generar código tan rápido como **C**, pero con las ventajas de seguridad de memoria y gestión automática de recursos.
>
> — *Visita el sitio oficial para más información*: [*https://www.swift.org*](https://www.swift.org/)

#### **Como encaja I/O arquitectonicamente**

Comprender el papel de **I/O** dentro del ecosistema, implica situarlo en el contexto de las capas tecnológicas que componen una arquitectura de procesamiento moderna.

**I/O** se ubica en el punto intermedio entre las APIs de bajo nivel —como *CoreAudio*, *WASAPI* o *ALSA*— y las capas de alto nivel dedicadas a la composición o renderizado de audio. Esto le permite actuar como un motor, capaz de orquestar el flujo de señal y ejecutar bloques DSP con precisión temporal, manteniendo independencia del sistema operativo.

A diferencia de las librerías DSP puras, **I/O** no se limita sólo a funciones de procesamiento: implementa un sistema completo de enrutamiento, sincronización y ejecución *determinista*, gestionando de forma autónoma los nodos, búferes y dependencias del grafo.

Su diseño **modular** permite extender o sustituir componentes, y su integración el hardware garantiza una comunicación directa con los dispositivos de entrada y salida. De esta manera, **I/O** actúa como el núcleo operativo: traduce las señales provenientes del hardware, organiza el procesamiento interno y entrega resultados con latencia mínima.

En la jerarquía del ecosistema, **I/O** proporciona la *infraestructura* sobre la cual pueden construirse sistemas de producción, análisis y renderizado profesional.

**I/O** combina diseño y rendimiento, garantizando precisión y baja latencia.

{% hint style="info" %}
Un **DAG** *(Directed Acyclic Graph)* es una estructura que organiza el flujo de procesamiento como una red de nodos conectados, donde la señal siempre avanza hacia adelante sin *retroalimentaciones*. Cada nodo representa una operación y las conexiones determinan cómo fluye la señal.
{% endhint %}

#### **Infraestructura**

Como se mencionó, en la base de la jerarquía se encuentran las APIs de bajo nivel y los **drivers** del sistema operativo. *CoreAudio, WASAPI, ASIO o ALSA* manejan el acceso directo a los dispositivos de entrada/salida, los buffers y la sincronización con el hardware.

Sobre ellas se ubica **I/O**, que abstrae esas diferencias y permiten una implementación multiplataforma, en conjunto operan las librerías **DSP**, diseñadas para proporcionar bloques funcionales, como filtros, osciladores, **FFTs** o generadores de envolvente.

**I/O** representa la primera capa en el flujo de procesamiento.

{% embed url="<https://youtu.be/XOCV5JVprhk>" %}

#### **Implementación**

**I/O** adopta una filosofía de diseño *modular, declarativa y extensible.*&#x20;

El audio puede describirse como un conjunto de nodos interconectados, cada uno responsable de una tarea de procesamiento DSP específica. Estas *conexiones* forman un grafo dinámico que define el flujo de señal, permitiendo reconfiguración en tiempo real sin interrupciones.

Cada componente del sistema es **autocontenible**, lo que facilita tanto la construcción de cadenas simples como la de sistemas complejos de mezcla, análisis o renderizado. La comunicación entre nodos sigue un modelo *pull-based* *determinista*, asegurando que cada bloque procese solo los datos necesarios, optimizando el rendimiento y la latencia.

Los **nodos** procesan y el **contexto** coordina el flujo del audio. Esta organización promueve una arquitectura donde las operaciones son reproducibles a nivel de muestra.

**I/O** prioriza la transparencia del procesamiento y la extensibilidad.

#### **Filosofía de diseño (Manifiesto)**

**I/O** fue concebido como un motor en tiempo real que debía cumplir con cuatro principios: *precisión, rendimiento, funcionalidad y estabilidad*. Estos representan los fundamentos que orientan cada decisión arquitectónica del framework.

<details>

<summary>Precisión</summary>

El **procesamiento** se realiza en punto flotante `Float64` para mantener la integridad numérica y evitar la acumulación de error. Los parámetros se interpolan de forma continua para eliminar artefactos y garantizar transiciones suaves. Los módulos **DSP** integran algoritmos de alta fidelidad con gestión de aliasing y oversampling.

</details>

<details>

<summary>Rendimiento</summary>

El tiempo real impone una exigencia de eficiencia y determinismo. **I/O** adopta un modelo de procesamiento por bloques que reduce la sobrecarga y optimiza el uso del procesador. En el hilo de audio, el motor opera bajo una política estricta de cero asignaciones dinámicas, asegurando latencia mínima y estabilidad constante bajo cargas variables.

</details>

<details>

<summary>Funcionalidad</summary>

Cada **nodo del grafo** funciona como una unidad autónoma que puede integrarse, reemplazarse o combinarse sin afectar la estructura del sistema. Esta composición facilita la creación de flujos complejos manteniendo claridad y previsibilidad. La API ofrece un sistema de parámetros flexible para control externo, automatización y modulación.

</details>

<details>

<summary>Estabilidad</summary>

Incorporar un modo de ejecución **offline** que permita validar el comportamiento del grafo y realizar pruebas automatizadas sin depender del tiempo real. Incluye herramientas visuales —como **FFTs**, espectrogramas y medidores— junto con un sistema de registro y diagnóstico continuo que garantiza trazabilidad y detección temprana de anomalías.

</details>

#### **Arquitectura de Grafo**

La arquitectura permite modelar el flujo como una red de operaciones, donde los **nodos** pueden conectarse o desconectarse dinámicamente sin interrumpir la ejecución.&#x20;

Esta flexibilidad se combina con una planificación de eventos *sample-accurate*, ideal para automatización o reproducción sincronizada. El enfoque *pull-based* asegura eficiencia, y el soporte para **subgrafos** permite construir bloques reutilizables.

**Conceptos fundamentales**

* Grafo dirigido: operaciones y conexiones que definen el flujo de audio.
* Nodos conectables dinámicamente permite agregar/quitar nodos sin interrumpir el audio.
* Sample-accurate scheduling: ejecución precisa de eventos en el timeline de audio.
* Procesamiento pull-based: datos fluyen desde outputs hacia inputs sin cómputo innecesario.
* Soporte para subgrafos/modularidad: encapsulación de secciones reutilizables.

Cada elemento conforma un flujo de procesamiento flexible y estable. El resultado es un sistema modular capaz de adaptarse a cualquier escenario de audio.

{% hint style="success" %}
Existen *arquitecturas alternativas*, como los *pipelines lineales*, los *modelos basados en buses*, o los *sistemas dirigidos por eventos*. Sin embargo, el *modelo basado en grafos* (***DAG***) se ha convertido en el estándar de la industria por su capacidad para combinar flexibilidad y rendimiento.
{% endhint %}
