Construir um motor de som do zero é um rito de passagem. Você quer entender o relógio. O momento. A lógica crua que transforma o silêncio em ritmo. Um sequenciador é essa lógica. É uma grade. Você coloca notas. Você segue em frente.
A maioria dos tutoriais pula a parte difícil. Eles mostram uma biblioteca. Eles mostram uma GUI. Eles não mostram como lidar com a deriva. Os erros de tempo que surgem quando você monitora o tempo manualmente.
Vamos consertar isso.
Estamos construindo um sequenciador de passos básico. Ele será executado em um loop simples. Isso irá desencadear sons. Ele manterá o tempo sem olhar para frente. Essa abordagem evita a sensação de “agitação” que você tem ao usar setTimeout para loops longos.
O conceito central: tempo baseado em etapas
Um sequenciador funciona em etapas. Não segundos. Passos.
Se o seu andamento for 120 BPM, cada batida terá 0,5 segundos. Se você tiver 16 etapas, cada etapa durará 0,125 segundos. A mágica acontece quando você fixa esses intervalos.
“O tempo não é um fluxo contínuo em um sequenciador. É uma série de eventos discretos. A sincronização com esses eventos é tudo.”
Precisamos de uma maneira de calcular quando cada etapa acontece. Não por adivinhação. Pela matemática.
Configurando o relógio
Você precisa de um ponto de referência. A hora de início.
Em JavaScript, Date.now() ou performance.now() fornece milissegundos. Você usa isso para calcular o desvio.
- Defina o andamento.
- Calcule a duração da etapa.
- Inicie um loop.
Aqui está o esqueleto. Não é bonito. Funciona.
Este código é básico. Ele usa setTimeout. Não é perfeito. Mas é um começo.
Por que isso é importante
Por que construir você mesmo?
Bibliotecas como Tone.js ou wrappers de API de áudio da Web são ótimas. Eles lidam com o agendamento complexo. Eles compensam a latência.
Mas você não aprende como eles funcionam usando-os. Você aprende vendo onde eles falham.
Quando setTimeout varia, sua batida oscila. Parece humano. Parece errado.
Lidando com a deriva
A verificação if (nextStepTime < Date.now()) é crítica.
Isto























