Construir un motor de sonido desde cero es un rito de iniciación. Quieres entender el reloj. El momento. La lógica cruda que convierte el silencio en ritmo. Un secuenciador es esa lógica. Es una cuadrícula. Colocas notas. Sigues adelante.
La mayoría de los tutoriales se saltan la parte difícil. Te muestran una biblioteca. Te muestran una GUI. No te muestran cómo manejar la deriva. Los errores de sincronización que aparecen cuando realizas un seguimiento del tiempo manualmente.
Arreglemos eso.
Estamos construyendo un secuenciador de pasos básico. Se ejecutará en un bucle simple. Activará sonidos. Mantendrá el tiempo sin mirar hacia adelante. Este enfoque evita la sensación “entrecortada” que se produce cuando se utiliza setTimeout para bucles largos.
El concepto central: sincronización basada en pasos
Un secuenciador trabaja por pasos. No segundos. Pasos.
Si su tempo es de 120 BPM, cada tiempo es de 0,5 segundos. Si tienes 16 pasos, cada paso es de 0,125 segundos. La magia ocurre cuando te fijas en estos intervalos.
“El tiempo no es un flujo continuo en un secuenciador. Es una serie de eventos discretos. La sincronización con estos eventos lo es todo”.
Necesitamos una forma de calcular cuándo ocurre cada paso. No adivinando. Por matemáticas.
Configurar el reloj
Necesitas un punto de referencia. La hora de inicio.
En JavaScript, Date.now() operformance.now() te da milisegundos. Usas esto para calcular la deriva.
- Defina el tempo.
- Calcule la duración del paso.
- Inicie un bucle.
Aquí está el esqueleto. No es bonito. Funciona.
Este código es básico. Utiliza setTimeout. No es perfecto. Pero es un comienzo.
Por qué esto es importante
¿Por qué construirlo usted mismo?
Bibliotecas como Tone.js o envoltorios Web Audio API son geniales. Ellos se encargan de la programación compleja. Compensan la latencia.
Pero no se aprende cómo funcionan usándolos. Se aprende viendo dónde fallan.
Cuando setTimeout se desvía, tu ritmo se tambalea. Suena humano. Suena mal.
Manejando la deriva
La verificación if (nextStepTime < Date.now()) es fundamental.
Él























