volume_control_featured

en Tutoriales, UE4

Cómo añadir un control de volumen

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.

volume_control_screen

Pero, antes de ponernos a diseñar la interfaz, necesitamos entender algunos conceptos del audio utilizado por UE4.

UE4_sound_files

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.

import_sound

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.

create_cue

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.

SoundCueEditor_plain

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.

sound_class_menu

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_class_master

Sound Mix

Los Sound Mixes nos permiten establecer los parámetros del ecualizador y modificar el Volumen y Tono de las Sound Classes.

soundmix_ue4

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.

init_soundclass
Inicialización del volumen de la music Sound Class

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.

project_content

Tres clases de sonido (sound classes) SC_Master, SC_Music and SC_SFX, con la relación jerárquica vista antes.

sound_class_master

Podemos crear un Sound cue para cada asset de audio y establecer su sound class correspondiente en la sección Sound.

soundcue_details
Detalles de Sound cue

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.

add_audio_component

Para interactuar con esta componente podemos utilizar nodos de audio como Play, Stop, Set Pause

play_node

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.

actor_gamebp
Actor GameBP
Gamebp_initializeUI
Función InitializeUI de GameBP

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.

audio_initialization
Inicialización del nivel

El diálogo de opciones va a consistir en dos controles deslizantes.

slide_controls

Tendremos que definir sus eventos OnMouseCaptureEnd/OnControllerCaptureEnd y OnValueChange.

slider_events

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.

slider_events_music

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.

slider_events_sfx

No tenemos que olvidarnos de inicializar la posición de los controles deslizantes cuando añadimos el widget al viewport.

slider_initialization

Y ya está, tenemos un sencillo, pero efectivo control de volumen!

youtube_volumecontrol

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!

Escribe un comentario

Comentario