Parte: 6 — Audio y música interactiva · Fuente: Documentación oficial de Audiokinetic Wwise + integración Wwise para Godot 4 (comunidad) ⏱️ Duración estimada: 50 min · Nivel: Intermedio
Conocer Wwise (de Audiokinetic), el otro gran middleware de audio de la industria, y su modelo mental propio: una jerarquía de actor-mixer, eventos que actúan como acciones, RTPC para modular en tiempo real, y states/switches para el contexto del juego. Aprenderás a generar soundbanks, integrarlos en Godot 4 con un plugin y disparar un evento con un RTPC que ligue una variable de gameplay al volumen. Al terminar podrás comparar Wwise con FMOD y elegir con criterio.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Qué es Wwise y quién lo usa | Estándar en producciones AAA; conviene entender su terminología |
| 2 | Jerarquía actor-mixer | Organiza todos los sonidos y su enrutado de mezcla |
| 3 | Eventos como acciones | En Wwise un evento ejecuta acciones (play, stop, set state...) |
| 4 | RTPC | Ligan valores del juego a propiedades de audio en tiempo real |
| 5 | States y switches | Modelan el contexto global (states) y por objeto (switches) |
| 6 | Soundbanks | Empaquetan estructuras y medios para cargar en runtime |
| 7 | Integración con Godot 4 | El puente vive en un plugin; Godot no trae Wwise nativo |
| 8 | Comparación con FMOD | Ayuda a elegir la herramienta adecuada al proyecto y al equipo |
PostEvent, no a un archivo.Combate vs Exploracion) que afecta la mezcla. Clave: cambia el ambiente sonoro completo..bnk con las estructuras y, opcionalmente, los medios de audio. Clave: se carga y descarga para gestionar memoria.Descarga Wwise a través del Audiokinetic Launcher desde audiokinetic.com (cuenta gratuita; licencia gratuita para proyectos por debajo de cierto umbral). Para el puente con el motor necesitas una integración de Wwise para Godot 4 basada en GDExtension, disponible en el ecosistema de la comunidad (busca "Wwise Godot integration"). Consulta la documentación de Wwise y su guía de RTPC. Igual que con FMOD, Godot 4 no ofrece API nativa de Wwise: todo el flujo (PostEvent, SetRTPCValue, banks) pasa por el plugin. Verifica que la versión de la integración corresponde a tu build de Wwise y de Godot antes de empezar.
Crearemos un evento Play_Wind cuyo volumen crece con la velocidad del jugador mediante un RTPC Velocidad, generaremos el soundbank y lo dispararemos desde Godot. Sin Wwise instalado puedes seguir los pasos conceptuales y escribir el snippet de integración; lo observable es el viento subiendo de volumen al acelerar.
Paso 1 — Organiza la jerarquía. En Wwise, en Audio → Actor-Mixer Hierarchy, crea un Sound SFX llamado Wind e importa un loop de viento (WAV). Actívalo como bucle en sus propiedades.
Paso 2 — Crea el evento. En Events, clic derecho → New Event → Play, apúntalo a Wind y nómbralo Play_Wind. Ese evento ejecutará la acción Play sobre el sonido.
Paso 3 — Define el RTPC. En Game Syncs → Game Parameters, crea Velocidad con rango 0 a 100. Selecciona el sonido Wind, ve a su pestaña RTPC, añade una curva que ligue Velocidad a Voice Volume: en 0 el volumen es -60 dB (silencio), en 100 sube a 0 dB.
Paso 4 — Genera el soundbank. En SoundBanks, crea un bank Main, arrastra el evento Play_Wind dentro y pulsa Generate. Se producirá Main.bnk junto a Init.bnk (siempre necesario).
Paso 5 — Integra en Godot. Instala la integración de Wwise en addons/, reinicia el editor y copia los .bnk a res://audio/wwise/. En un Node:
extends Node
# Los nombres de la API dependen de la integración Wwise-Godot que uses.
# Siguen la convención PostEvent / SetRTPCValue / LoadBank del SDK de Wwise.
var _id_viento: int = 0 # playing ID devuelto por PostEvent
func _ready() -> void:
# 1) Cargar el bank de inicialización y el principal.
Wwise.load_bank("Init")
Wwise.load_bank("Main")
# 2) Registrar este nodo como game object emisor de audio.
Wwise.register_game_obj(self, "Jugador")
# 3) Disparar el evento; guarda el playing ID para poder detenerlo luego.
_id_viento = Wwise.post_event("Play_Wind", self)
func _process(_delta: float) -> void:
# 4) Actualizar el RTPC con la velocidad actual del jugador (0..100).
var velocidad: float = clampf(_velocidad_jugador(), 0.0, 100.0)
Wwise.set_rtpc_value("Velocidad", velocidad, self)
func _velocidad_jugador() -> float:
# Sustituir por la velocidad real; aquí una demo con la entrada.
return Input.get_action_strength("acelerar") * 100.0
func _exit_tree() -> void:
# 5) Limpiar: detener el evento y desregistrar el game object.
Wwise.stop_event(_id_viento)
Wwise.unregister_game_obj(self)
Paso 6 — Ejecuta y escucha. Al mantener acelerar, el RTPC Velocidad recorre la curva y el viento pasa de inaudible a pleno volumen. Ese cambio, dirigido por una variable del juego sin tocar el archivo, es la potencia de Wwise.
Resultado visible: un loop de viento cuyo volumen sigue la velocidad del jugador en tiempo real vía RTPC.
Interior/Exterior que baje el volumen del viento en interiores.Velocidad para simular presión de aire.Main.bnk al salir de la escena y verifica que el evento deja de sonar.Main.bnk con y sin medios embebidos; anota la diferencia.Entrega una escena de Godot con la integración Wwise donde un objeto reproduce Play_Wind y un control en pantalla ajusta el RTPC Velocidad de 0 a 100 en vivo, más un state global que cambia el ambiente. Incluye Init.bnk, Main.bnk y un README con los nombres de eventos, RTPC y states.
Criterio de aceptación: al variar la velocidad el volumen del viento cambia de forma audible y continua, el cambio de state altera perceptiblemente la mezcla, los banks cargan sin errores, y al cerrar la escena el evento se detiene y el game object se desregistra.
| Síntoma | Causa y arreglo |
|---|---|
El evento no suena aunque PostEvent no falla |
No cargaste Init.bnk; es obligatorio y va siempre primero |
| El RTPC no cambia nada | No trazaste la curva RTPC en el sonido o el nombre no coincide exacto |
| Error "game object not registered" | Llamas a PostEvent sin registrar el game object antes; regístralo en _ready |
| El state cambia pero no se oye | El state no está enlazado a ninguna propiedad; añade una State Property o mezcla por state |
| El bank pesa demasiado | Embebiste medios que se repiten en varios banks; usa un bank de medios compartido |
¿Wwise reproduce sonidos directamente? No: un evento dispara acciones (Play, Stop, Set State...). Es más indirecto que FMOD y por eso más flexible en producciones grandes.
¿Cuál es la diferencia entre state y switch? El state es global y cambia el contexto de todo el juego (combate vs calma); el switch es local a un objeto y elige una variación (tipo de suelo bajo un personaje).
¿Wwise es mejor que FMOD? Ni mejor ni peor: Wwise ofrece más granularidad y suele verse en AAA; FMOD tiene una curva más suave y es muy popular en indies. Elige según equipo y proyecto.
¿Godot habla con Wwise sin plugin? No. Como con FMOD, la integración vive en un plugin externo; Godot no incluye Wwise en su núcleo.
Clase 132 - Middleware de audio: FMOD