↓
iaen.es Diario de desarrollo Read in English

Gotic · 4 min de lectura

Sonido ambiente generado por código en Godot 4 que todavía no he escuchado

Pasos que cambian con el suelo, brazadas, pájaros, grillos, olas y viento, todo sintetizado en Python. Las pruebas dicen que no satura. Si suena bien, aún no lo sé.

#sonido#procedural#godot#mods#pruebas

Sonido ambiente generado por código en Godot 4 que todavía no he escuchado

Este mod tiene una confesión en el título. Sonido ambiente hace que la isla de Gotic suene: tus pasos crujen en la hierba, sisean en la arena y golpean hueco en la madera del muelle; al nadar, como en la portada, cada brazada chapotea; y de fondo se mezclan pájaros de día, grillos de noche, olas cerca de la costa y viento cuando subes alto o vuelas en la escoba. Todo usa el ajuste de efectos del juego y, como cualquier mod, funciona solo.

Y ninguno de esos sonidos lo ha escuchado nadie todavía.

Cómo está hecho

En Gotic no hay ni un archivo de sonido de terceros: todo se sintetiza con un script de Python puro, modulos/ambiente/sonidos.py, con semillas fijas para que salga siempre igual. Por ejemplo, un paso en la hierba es un crujido corto de ruido filtrado más un golpe sordo de 95 Hz para el talón; uno en la arena, un siseo más largo y sin golpe; las olas, un rumor grave que crece y rompe cada 4 segundos con espuma en la rotura; y los grillos, dos grillos a 4,3 y 4,9 kHz que cantan a trompicones de tres pulsos. Los bucles se cierran fundiendo el último segundo con el principio, para que no haya costura al dar la vuelta. Generarlo todo (cuatro efectos y cuatro bucles) tarda 2 s.

En el juego, los pasos salen de la animación: el cuerpo del personaje se anima por código con una fase de zancada, y cada vez que esa fase cruza 0 o π, un pie toca el suelo y suena un paso. Qué paso depende de dónde estás: si nadas, brazada (una por ciclo y solo avanzando); si estás por encima del suelo, madera (el muelle, un tejado); si estás cerca de la altura de la playa, arena; si no, hierba. Por debajo de 0,6 m/s no suenan.

El fondo son cuatro bucles que suenan siempre, con un volumen que sigue a una mezcla. Cada cuarto de segundo se miran 16 puntos alrededor del jugador (a 30 y a 60 m) para saber cuánto mar hay cerca, la altura sobre el suelo, si es de noche, si llueve y si hay bosque:

return {
	"amb_olas": coast * (1.0 - wind * 0.5),
	"amb_viento": wind,
	"amb_pajaros": (1.0 - night) * (1.0 - coast * 0.6) * (1.0 - wind) * (0.55 + 0.45 * forest) * (1.0 - wet),
	"amb_grillos": night * (1.0 - coast * 0.5) * (1.0 - wind) * (1.0 - wet),
}

El volumen de cada bucle se acerca poco a poco a su objetivo, así que nada entra ni sale de golpe. La noche la da el mod de día y noche y la lluvia el del tiempo, pero este no conoce a ninguno de los dos: lee world.scenery.night y world.scenery.rain, que valen cero si no están.

Un detalle de orden que está en las lecciones del proyecto: el sistema de audio del juego se crea después de cargar los mods, así que un mod que registra sus efectos al arrancar se encuentra el audio sin crear. Los pasos se registran en el primer fotograma. En las pruebas no se crean reproductores, pero la mezcla se calcula igual y se puede comprobar.

Lo que falta por comprobar

Lo principal: oírlo. No se pudo escuchar al hacerlo, así que lo único que sé es lo que dicen los números. Los ocho sonidos salen sin recortes, y el empalme de los bucles salta entre 0 y 1,4 veces lo que salta normalmente una muestra de la siguiente: no debería oírse un chasquido. Corriendo por la hierba con la física del juego suenan de 7 a 13 pasos en 2 s, y una prueba falla si quito la arena o la detección de la zancada. Pero que no sature no quiere decir que suene bien.

En la misma ronda, el maullido del gato salía muy por encima del resto y lo bajé a −16,7 dBFS sin haberlo oído. Es la lección que más se repite en este proyecto: lo generado por código puede pasar todas las pruebas y sonar mal. Oír el sonido sigue en la lista de lo que bloquea publicar el juego.

Más de Gotic →