Repository navigation
Sonido con FMOD
TDD · Documento técnico
Uso FMOD Studio con su integración para Unity. El proyecto de FMOD vive en la carpeta FMOD/ en la raíz del repositorio, fuera de Assets. Los bancos que genera se compilan en la carpeta que configura la integración y se guardan con Git LFS (*.bank), igual que el resto de binarios pesados. La idea general del sonido del juego está en Interfaz, arte y sonido; aquí describo lo técnico.
| Evento | Parámetros | Cuándo suena |
|---|---|---|
event:/Gun/Jet |
Temperatura (0-1), Amplitud (0-1) | En bucle mientras el chorro está activo. Cambia de timbre con la temperatura y con la amplitud |
event:/Gun/Vacuum |
Succion (0-1), TanqueLleno (0/1) | En bucle mientras aspiro. Con el tanque lleno cambia a un sonido de esfuerzo |
event:/Ice/Melt |
RitmoFundido | En bucle mientras el chorro funde hielo. Sigue los litros fundidos por segundo |
event:/Water/Merge |
Nivel (0-3) | Una vez, cuando dos bolitas se fusionan. El nivel cambia el tono |
event:/Caves/Open |
Ninguno | Una vez, al abrirse una cueva |
event:/Minerals/Crack |
Integridad | Mientras un cristal se agrieta. Sigue su integridad |
event:/Minerals/Release |
Ninguno | Una vez, cuando un cristal se suelta |
event:/Loot/Species |
Ninguno | Una vez, al registrar una especie nueva |
event:/Fossil/Snap |
Ninguno | Una vez, cuando un hueso encaja |
event:/Fossil/Slip |
Ninguno | Una vez, cuando un hueso mal colocado resbala |
event:/World/ModuleComplete |
Ninguno | Una vez, al completar un módulo |
event:/Ambience/Depth |
Profundidad (global) | En bucle durante toda la partida |
Profundidad es un parámetro global. Lo calculo a partir de la altura del jugador y lo actualizo cuando cambia, de modo que el ambiente y otros eventos pueden leerlo sin que yo se lo pase a cada uno.
Los snapshots cambian la mezcla en bloque:
| Snapshot | Cuándo está activo |
|---|---|
snapshot:/Surface |
En la superficie |
snapshot:/UnderIce |
Bajo el hielo, en la piscina |
snapshot:/Cave |
Dentro de una cueva abierta, con reverberación |
Para saber si estoy en una cueva consulto el id de región en la posición del jugador, con la misma lectura de densidad del sistema de hielo (Sistema de hielo). Si esa región es una cueva abierta, el snapshot Cave entra con un fundido, y sale igual cuando vuelvo al hielo.
El mezclador tiene un bus Master y cuatro buses debajo: Música, Ambiente, SFX y UI. Los VCAs me dan un control de volumen por categoría para el menú de opciones.
AudioService es el único componente que habla con FMOD. Se suscribe a los canales de eventos (Arquitectura) y reacciona: para los sonidos de una sola vez llama a RuntimeManager.PlayOneShot, y para los bucles guarda un EventInstance que arranca, para y libera él mismo. Los parámetros los cambio con setParameterByName solo cuando el valor ha variado, no en cada fotograma, porque llamar a FMOD con el mismo valor es trabajo inútil.
Los eventos con posición en el mundo, como el chorro o el cristal que se agrieta, siguen su objeto con RuntimeManager.AttachInstanceToGameObject, de modo que se oyen con la espacialización correcta mientras me muevo.
Las referencias a eventos no son cadenas sueltas. Un ScriptableObject AudioEvents guarda un campo EventReference por cada evento de la tabla, y AudioService los lee de ahí. Como EventReference guarda también el GUID del evento, puedo renombrar o mover un evento en FMOD Studio sin que la referencia deje de apuntar al evento correcto.
Uso el live update de FMOD Studio para mover parámetros con el juego en marcha y escuchar el resultado al momento, y el profiler de FMOD para ver cuántas voces suenan a la vez y cuánto CPU cuesta el audio. Eso entra en el presupuesto de "Gameplay, UI y audio" de Arquitectura.
El riesgo principal de FMOD es técnico, no de sonido: que la integración rompa el build. Por eso lo compilo pronto y a menudo, como detallo en Guardado, rendimiento y pruebas.
FMOD ofrece licencia gratuita para proyectos pequeños y no comerciales. Antes de publicar nada fuera del ámbito de la asignatura, reviso las condiciones vigentes.
Los rangos de los parámetros de esta página son valores iniciales y los ajusto al escuchar el juego.
GDD · Documento de diseño
- Concepto e historia
- Mecánicas
- Cuevas y minerales
- El fósil
- Progresión y economía
- Interfaz, arte y sonido
- Alcance y riesgos
TDD · Documento técnico
- Arquitectura
- Sistema de hielo
- Generación de cuevas
- Bolitas y pistola
- Montaje del fósil
- Sonido con FMOD
- Guardado, rendimiento y pruebas
Seguimiento