Aratu música escrita para tocar e mudar enquanto toca

5. Do texto ao som

▶ Abrir no Aratu para ouvir e mudar os exemplos

Quando você edita, o texto passa por estas etapas, cada uma num módulo do compilador (escrito em Rust e levado ao navegador como WebAssembly):

  1. Léxico. O texto é cortado em linhas, blocos e palavras.
  2. Pré-leitura. Motivos, séries, listas e o tom são recolhidos primeiro, para que uma linha possa usá-los de qualquer lugar do texto.
  3. Análise sintática (parse). Cada linha vira uma declaração numa árvore de sintaxe (AST), com o lugar exato onde cada pedaço está escrito, para as mensagens e para acender as notas.
  4. Modelo. As declarações viram partes, linhas, padrões, seções e ordens, com as conferências: se cada compasso cabe na fórmula, se os nomes existem.
  5. Desenrolar. Ritornelos, saltos, % e x4 viram uma sequência simples de compassos.
  6. Dinâmica e tempo. Cada nota recebe a sua força, e as posições viram segundos pelo mapa de andamento. As posições são frações exatas: uma tercina é 1/3 de tempo, sem arredondar.
  7. Agendamento (scheduling). Para os compassos pedidos, saem os eventos: cada nota, cada batida, cada mudança de parâmetro, com o instante em segundos.

O agendamento é determinístico: o mesmo texto, a mesma semente e os mesmos compassos de partida dão sempre os mesmos eventos. Por isso o tocador pode pedir um compasso de cada vez, um pouco antes de ele soar, e uma edição pode entrar no compasso seguinte sem que nada recomece.

Os eventos vão para o motor de áudio. Os sons gravados e as baterias tocam pelo motor do Manguebyte (um AudioWorklet que roda WebAssembly); os outros, pelo motor provisório feito com o Web Audio do navegador.