Aratu música escrita para tocar y cambiar mientras suena

5. Del texto al sonido

▶ Abrir en Aratu para escuchar y cambiar los ejemplos

Cuando editas, el texto pasa por estas etapas, cada una en un módulo del compilador (escrito en Rust y llevado al navegador como WebAssembly):

  1. Léxico. El texto se corta en líneas, bloques y palabras.
  2. Lectura previa. Motivos, series, listas y la tonalidad se recogen primero, para que una línea pueda usarlos desde cualquier lugar del texto.
  3. Análisis sintáctico (parse). Cada línea se vuelve una sentencia en un árbol de sintaxis (AST), con el lugar exacto donde está escrito cada trozo, para los mensajes y para encender las notas.
  4. Modelo. Las sentencias se vuelven partes, líneas, patrones, secciones y órdenes, con las comprobaciones: si cada compás cabe en el compás indicado, si los nombres existen.
  5. Desenrollar. Repeticiones, saltos, % y x4 se vuelven una secuencia simple de compases.
  6. Matices y tiempo. Cada nota recibe su fuerza, y las posiciones se vuelven segundos por el mapa de tempo. Las posiciones son fracciones exactas: un tresillo es 1/3 de tiempo, sin redondear.
  7. Programación (scheduling). Para los compases pedidos, salen los eventos: cada nota, cada golpe, cada cambio de parámetro, con el instante en segundos.

La programación es determinista: el mismo texto, la misma semilla y los mismos compases de partida dan siempre los mismos eventos. Por eso el reproductor puede pedir un compás cada vez, un poco antes de que suene, y una edición puede entrar en el compás siguiente sin que nada empiece de nuevo.

Los eventos van al motor de audio. Los sonidos grabados y las baterías suenan con el motor de Manguebyte (un AudioWorklet que ejecuta WebAssembly); los demás, con el motor provisional hecho con el Web Audio del navegador.