Con este breve tutorial vamos a añadir un sencillo control para establecer el volumen de la música y los efectos de sonido (SFX) de manera independiente
En el control de volumen más básico cada tipo de sonido tiene asociado un control deslizante propio, moviendo la barra hacia un lado su volumen se verá incrementado y moviendolo hacia el lado contrario se verá reducido.
Pero, antes de ponernos a diseñar la interfaz, necesitamos entender algunos conceptos del audio utilizado por UE4.
El sistema de audio de Unreal Engine 4 está formado por diversas componentes, trabajando unas con otras para producir la experiencia de audio del jugador
El primer paso es importar los ficheros de audio. Podemos utilizar el mismo botón utilizado para importar otros assets.
Importar un fichero de audio en el editor genera una Onda de sonido o track que puede soltarse directamente en un nivel o puede utilizarse para crear un Sound Cue y ser editada en el Sound Cue Editor.
Sound Cue
Los Sound Cues son sonidos compuestos que nos permiten modificar el comportamiento de la reproducción del audio, combinar efectos, y aplicar modificadores utilizando Sound Nodes para alterar la salida final. Para más información puedes visitar Sound Cue Editor page.
Sound Class
Las Sound Classes son una colección de propiedades que pueden aplicarse a un conjunto de Sound assets. Por ejemplo podemos crear una clase para la música de fondo, otra para los efectos de sonido, otra para los diálogos, y establecer una relación jerárquica entre ellas.
Las jerárquias se pueden crear añadiendo Child Classes, las cuales nos permiten pasar solo las propiedades especificas de la clase padre a las hijas. Podemos conectar todas estas clases en el Sound Class Editor, que cuenta con una interfaz basada en nodos similar a la que hemos visto en el Sound Cue Editor.
Para nuestro ejemplo vamos a crear la siguiente jerarquía:
- Master
- Music
- SFX
Sound Mix
Los Sound Mixes nos permiten establecer los parámetros del ecualizador y modificar el Volumen y Tono de las Sound Classes.
Multiples Sound Mixes pueden estar activos al mismo tiempo, todos contribuyendo al efecto de audio total. Podemos activar (Push) o desactivar (Pop) Sound Mixes directamente en un Blueprint con los nodos Push Sound Mix Modifier y Pop Sound Mix Modifier.
Para establecer el volumen de nuestra clase dinámicamente tenemos que utilizar el nodo Set Sound Mix Class Override. Este nodo puede modificar un Sound Mix y establecer la Sound Class que se verá afectada, interpolando entre la clase actual y la nueva clase con las modificaciones aplicadas en el tiempo.
Hay que tener en cuenta que si el Sound Mix no esta activo (no se ha realizado el Push) tendremos que utilizar el nodo Push Sound Mix Modifier para hacer el cambio efectivo. En las sucesivas llamadas podremos reemplazar los parámetros del sound mix utilizando solo el nodo Set Sound Mix Class Override.
Fade in Time especifica cuanto tiempo se va a emplear en completar la transición entre el volumen viejo y el nuevo. Para un cambio instantáneo lo estableceremos en cero.
Ejemplo Blueprint
Para este ejemplo vamos a importar 2 ficheros de audio, uno para representar la música de fondo y otro para los efectos de sonido.
Tres clases de sonido (sound classes) SC_Master, SC_Music and SC_SFX, con la relación jerárquica vista antes.
Podemos crear un Sound cue para cada asset de audio y establecer su sound class correspondiente en la sección Sound.
Y por último dos Sound Mixes para poder cambiar el volumen de cada clase de manera independiente.
- SM_Music
- SM_SFX
Podemos añadir la pista de fondo soltando directamente la cue que hemos creado dentro de nuestro nivelo añadiendo una componente de audio y escogiendo la cue en el cuadro desplegable del campo Sound.
Para interactuar con esta componente podemos utilizar nodos de audio como Play, Stop, Set Pause
Tenemos que añadir dos variables a nuestra clase encargada de controlar la información de juego para almacenar los valores de los volúmenes.
Tenemos que guardar los valores de volumen establecidos por los controles deslizantes en un savegame e inicializar el sonido del juego usando estos valores la próxima vez que lo iniciemos. Cargamos el valor en nuestras variables y luego establecemos los volúmenes sobreescribiendo el Sound Mix de la Sound Class correspondiente usando el nodo Set Sound Mix Class Override. Tendremos que realizar el Push de estos Sound Mixes en este punto también para activarlos.
El diálogo de opciones va a consistir en dos controles deslizantes.
Tendremos que definir sus eventos OnMouseCaptureEnd/OnControllerCaptureEnd y OnValueChange.
Como queremos cambiar el volumen de la música mientras nos desplazamos por el control tenemos que poner el nodo Sound mix class override en el evento OnValueChanged. En este punto ya no necesitamos realizar el Push del Sound Mix puesto que ya lo hicimos en la inicialización del nivel. Cuando el usuario deja de pulsar podemos salvar el valor a nuestro fichero físico para los próximos arranques del juego.
El control de SFX tiene una implementación similar pero queremos emitir un sonido cuando deje de pulsar para comprobar el volumen establecido finalmente. Para reproducir este sonido podemos utilizar el nodo Play Sound 2D con el cue del sonido correspondiente.
No tenemos que olvidarnos de inicializar la posición de los controles deslizantes cuando añadimos el widget al viewport.
Y ya está, tenemos un sencillo, pero efectivo control de volumen!
Te puede interesar:
Ayudanos con este blog!
El último año he estado dedicando cada vez más tiempo a la creación de tutoriales, en su mayoria sobre desarrollo de videojuegos. Si crees que estos posts te han ayudado de alguna manera o incluso inspirado, por favor considera ayudarnos a mantener este blog con alguna de estas opciones. Gracias por hacerlo posible!