Sonido en tus juegos

Sin descargar ni un solo archivo de audio: el navegador puede generar sonido con código, desde cero.

Todo sonido en la web pasa por un AudioContext: es la mesa de mezcla donde se conectan las piezas de audio. Primero se crea, y después se le conectan osciladores —generadores de un tono puro— y controles de volumen.

Un detalle del navegador: por seguridad, el audio no puede arrancar solo al cargar la página. Tiene que empezar dentro de un clic o un toque real de la persona. Por eso este ejemplo usa un botón.

El oscilador tiene una propiedad type que cambia el timbre del sonido: "sine" suena suave y redondo, "square" suena parecido a un videojuego viejo, "sawtooth" suena áspero, y "triangle" queda en el medio.

Un efecto de videojuego casi nunca es un solo tono fijo: normalmente sube o baja de frecuencia en el trayecto. Eso se hace con frequency.exponentialRampToValueAtTime() — "ve deslizando la frecuencia hasta este valor, en este tiempo".

Con lo que sabes de setTimeout —o mejor, encadenando tiempos— puedes tocar varias notas seguidas. Una lista de notas más un bucle, otra vez.

AudioContext, osciladores y volumen, distintas formas de onda, deslizar la frecuencia para efectos de acierto y error, y encadenar notas para una melodía simple.

Nuestros cuatro juegos usan exactamente esta técnica para sus efectos — cero archivos de audio, todo generado con código.