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):
- Léxico. El texto se corta en líneas, bloques y palabras.
- Lectura previa. Motivos, series, listas y la tonalidad se recogen primero, para que una línea pueda usarlos desde cualquier lugar del texto.
- 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.
- 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.
- Desenrollar. Repeticiones, saltos,
%yx4se vuelven una secuencia simple de compases. - 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.
- 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.