33 efectos de sonido y ni un solo archivo de audio
· 4 min de lectura
Strandbreak Online hace mucho ruido: ocho armas principales, cada una con su propio disparo, una docena de armas secundarias que toman prestada la voz del arma a la que más se parecen, impactos e impactos críticos, muertes y muertes de élite, objetos recogidos, subidas de nivel, explosiones y un jefe con cinco sonidos propios. Treinta y tres efectos de sonido en total, y la descarga del juego no contiene ningún archivo de audio.
Cómo funciona
Cada sonido es una receta corta escrita como datos: qué osciladores, qué forma de envolvente de volumen, un filtro, un poco de ruido. Al arrancar el juego, esas recetas se convierten en búferes de muestras en bruto (lo mismo en lo que se habría decodificado un archivo de audio) y se reproducen desde ahí.
El coste, medido en el navegador, es de 37 milisegundos para generar los once sonidos que conviene tener listos en cuanto el navegador permite el audio, a 48.000 muestras por segundo. El resto se genera la primera vez que suena. El coste en descarga es de cero bytes.
La ventaja que nadie espera: se puede probar
Que la descarga sea más pequeña está bien. Más útil es que el código que convierte una receta en muestras es puro: no toca el sistema de audio del navegador ni la página. Eso significa que se ejecuta en un test normal, en una máquina sin altavoces, y un test puede afirmar cosas sobre cada uno de los sonidos del juego:
- Se oye. Su sonoridad está por encima de un mínimo. Una receta con una errata que genera silencio rompe la build.
- Nunca satura. Ninguna muestra pasa del máximo.
- No contiene nada roto: ningún número inválido.
- No tiene desplazamiento de continua, ese empuje constante hacia un lado que hace que los altavoces den un golpe.
- Empieza y termina en silencio, así que no hace clic.
- Es determinista: la misma receta produce las mismas muestras siempre.
- Es distinto de todos los demás sonidos. Si dos señales comparten receta por accidente, el test falla.
- Cada arma principal tiene su propio disparo, y cada arma del juego, secundarias incluidas, apunta a un sonido que existe.
Nada de eso se puede comprobar escuchando. El fallo que más importa («el evento se dispara y no sale nada») no se ve en una captura y se escapa con facilidad en una prueba de juego, porque el jugador está ocupado. Con archivos de audio, todo esto sería una persona repasando sonidos con los cascos puestos, una vez, y luego nunca más.
Tres cosas que tiene que hacer el mezclador de un juego de hordas
Un juego en el que puede haber cientos de enemigos en pantalla pide sonidos más deprisa de lo que nadie puede oírlos. Sin reglas, la mezcla se convierte en papilla, o en ruido.
Cada sonido tiene un intervalo mínimo y un presupuesto de voces. Un solo fotograma puede contener cincuenta eventos de impacto. Reproducidos como cincuenta sonidos superpuestos, solo son fuertes. Probado en el navegador, cincuenta peticiones simultáneas del sonido de impacto producen ahora dos voces. El oído no nota la diferencia, y el resto de la mezcla sobrevive.
Cada receta tiene su pico normalizado. Lo fuerte que suena un sonido respecto a otro se decide en la tabla de recetas, no con el volumen de cada capa, así que ajustar cómo está construido un sonido no cambia en silencio lo fuerte que suena.
Hay un limitador en la salida maestra. Cuarenta voces de un sonido con pico en 0,3 suman mucho más que el máximo, y lo que hace un navegador por encima del máximo es una distorsión audible. Un limitador suave mantiene la suma dentro.
Silenciar y atenuar son cosas distintas
Una regla más, aprendida a las malas en un juego anterior. Cuando la página necesita que el juego se calle (por un anuncio, por ejemplo), el juego se atenúa: baja el volumen hasta desaparecer y lo recupera cuando termina. Cuando el jugador pulsa silenciar, el juego queda silenciado. Son dos interruptores separados. Si son uno, el final de un anuncio le quita el silencio a un jugador que lo había pedido. Eso también se prueba en el navegador: un silencio activado durante una atenuación sobrevive al final de la atenuación.
La lección general
Generar recursos con código suele discutirse en términos de tamaño. El argumento más fuerte es que todo lo que genera una función pura se puede probar como cualquier otro código, y el sonido es una de las partes menos probadas de la mayoría de los juegos. Si una máquina no puede comprobar un sonido, tarde o temprano se romperá sin que nadie se dé cuenta.
Juega a Strandbreak Online, con el sonido activado.
