Propiedades FMOD en Unreal Engine 5 - C++ (Eventos, Instancias, Snapshots, y más…)
If you prefer to read an English version, click on this button =>
Unreal Engine Version: 5.0.3
FMOD Version: 2.02.07
Esta es una guía simple sobre las Propiedades FMOD esenciales que necesitamos para crear nuestros sistemas de audio en Unreal Engine 5. Vamos a aprender qué son, qué hacen y como definirlas/declararlas en C++ y después exponerlas a Blueprints.
IMPORTANTE!
〰️
IMPORTANTE! 〰️
Prerequisitos:
Crea un proyecto C++ third-person vacio y llámalo “MyUE5Project”.
Descarga e integra el plugin FMOD en tu proyecto.
Crea un nuevo proyecto FMOD Studio y define el directorio para construir tus bancos en MyUEProject/Content/FMOD
Construye el Master Bank
Para que este tutorial tenga sentido, es importante que sepas cómo integrar el plugin FMOD en Unreal Engine. Adicionalmente, considera leer y consultar mi post anterior sobre UPROPERTY & UFUNCTION:
IMPORTANTE!
〰️
IMPORTANTE! 〰️
Primeros Pasos:
En tu editor UE5 ve a Tools > Open Visual Studio o Tools > Open Xcode.
Abre el Content Drawer y da click en Settings, luego seleciona Show C++ Classes.
La carpeta C++ Classes será expuesta.
En el Content Drawer ve a la carpeta "MyUE5Project”. Da click derecho y selecciona “New C++ Class”.
Crea una clase de tipo Actor y llámala “MyCPPActorClass”.
Dentro de tu IDE ve a Games/MyUEProject/Source/MyUEProject y abre los dos: “MyCPPActorClass.cpp” y "MyCPPActorClass.h”.
Sobre los archivos .h y .cpp: Cada vez que creamos una clase en Unreal Engine, este crea dos archivos. El archivo con extensión .h o “header/encabezado” va a contener las “Declaraciones” (Propiedades/Variables, Constantes y Funciones), y el archivo con extensión .cpp va a contener las “Implementaciones” o "Definiciones” de estas declaraciones.
Propiedades FMOD:
Todas nuestras propiedades van a ser declaradas en el archivo "MyCPPActorClass.h”. Para simplificar nuestras pruebas, vamos a poner todas estas propiedades debajo del acceso public y escribir este macro UFUNCTION sobre todas ellas (Lee el post UPROPERTY & UFUNCTION para saber más):
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio")
1. Event (UFMODEvent*)
Un evento, es el recurso más esencial de FMOD. Los eventos van a contener nuestros efectos de sonido y pistas musicales, los cuales pueden ser instanciadas en tu juego.
De Firelight Technologies - FMOD:
An event is an instantiable unit of sound content that can be triggered, controlled, and stopped from game code. Everything that produces a sound in a game should have a corresponding event.
Traducción:
Un evento es una unidad de sonido instanciable, controlada y detenida por el código de juego. Todo lo que produce sonido en un juego debería tener un evento correspondiente.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODEvent* myEvent;
Editor y Blueprints:
2. Event Instance (FFMODEventInstance)
Cuando un Evento FMOD es disparado por una función, algunas crean Instancias (Event Instances), dándonos más control sobre nuestros sonidos (Reproducir, Pausar, Detener, Establecer Parámetros).
De Firelight Technologies - FMOD:
Your game can play multiple instances of each event in your project. It is even possible for multiple instances of the same event to be playing simultaneously.
All instances of the same event have the same content. However, each event instance has its own timeline position, position in 3D space, random modulator adjustments, playlist selections, and parameter values. Different instances of the same event can therefore produce very different output, even if they play simultaneously.
Traducción:
En tu proyecto, el juego puede reproducir múltiples instancias de cada evento. Es posible incluso, que múltiples instancias del mismo evento sean reproducidas simultaneamente.
Todas las instancias de un mismo evento llevan el mismo contenido. Sin embargo, cada instancia tiene su propia posición en la línea de tiempo, posición en el espacio 3D, moduladores con ajustes aleatorios, posiciones en una lista de reproducción, y diferentes valores en sus parámetros. Quiere decir que varias instancias de un mismo evento pueden generar diferentes resultados, incluso si suenan a la vez.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") FFMODEventInstance myEventInstance;
Editor y Blueprints:
3. Audio Component (UFMODAudioComponent*)
Cuando un Evento FMOD es disparado por una función, algunas crean Componentes (Audio Components), dándonos más control sobre nuestros sonidos (Reproducir, Pausar, Detener, Establecer Parámetros). Adicionalmente, los Audio Components están conectados a una posición en el mundo, y le permite al motor de juego darle propiedades de espacialización, oclusión, y atenuación a estos sonidos.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODAudioComponent* myAudioComponent;
Editor y Blueprints:
4. Bank (UFMODBank*)
Un banco FMOD va a contener nuestros eventos de audio y los va a cargar en memoria. Puedes asignar tus eventos a diferentes bancos. Adicionalmente, puedes cargarlos/descargarlos en cualquier momento para lograr la mejor optimización considerando el diseño y arquitectura de tu juego. Por defecto, Unreal Engine carga todos tus bancos al iniciar; esta opción puede ser deshabilitada en Edit > Project Settings > Plugins > FMOD Studio > Basic > Load All Banks
De Firelight Technologies - FMOD:
A bank is a collection of events from your FMOD Studio project, formatted and compressed for use with the version of the FMOD Engine integrated into in your game. Banks allow you to choose which content is loaded into memory at any given time.
Traducción:
Un banco es una colección de eventos de tu proyecto FMOD Studio, con formato y compresión para el uso con una versión del motor FMOD integrada en tu juego. Los bancos te permiten escoger qué contenido está cargado en memoria en cualquier momento.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODBank* myBank;
Editor y Blueprints:
5. Bus (UFMODBus*)
Un bus FMOD es un componente del mezclador de audio al cual le puedes asignar, enviar y sumar tus eventos de audio. Estos buses se comportan igual que en cualquier software de edición de audio - DAW (Reaper, Nuendo, Pro Tools, Logic, etc…), pero además pueden ser controlados por el motor de juego.
De Firelight Technologies - FMOD:
In FMOD Studio, a bus is a modular component of the mixer that produces a submix from the signals routed into it and has its own signal chain. All buses, other than port buses and the master bus, can be routed into group buses, into port buses, or into the master bus.
Traducción:
En FMOD Studio, un bus es un componente modular del mezclador el cual produce una sub-mezcla de las señales que se le envia y tiene su propio flujo de señal. Todos los buses, con excepción de los buses tipo puerto (port buses) y el bus maestro, pueden ser enviados a buses de agrupación, buses tipo puerto, y al bus maestro.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODBus* myBus;
Editor y Blueprints:
6. VCA (UFMODVCA*)
Un VCA FMOD es un fader que nos permite controlar el volumen de varios Eventos, Buses, y Retornos simultaneamente. Ninguna señal de audio pasa por ellos.
De Firelight Technologies - FMOD:
VCAs are a way of grouping buses for the purposes of volume control.
Events, group buses, and return buses can all be assigned to VCAs. Signals are not routed through VCAs but are assigned as parallel controls of the main signal chain.
VCAs can be useful for general project balancing and level mixing as they provide a quick way of grouping and adjusting events without affecting the signal chain in any way.
Traducción:
Los VCA son una forma de agrupar buses con el propósito de controlar su volumen.
Eventos, buses de agrupación, y retornos pueden ser asignados a VCAs. Las señales no pasan por los VCA pero son asignadas como controles paralelos a la cadena de señal principal.
Los VCA pueden ser útiles para balancear los niveles de mezcla de un proyecto ya que proveen una forma rápida de agrupar y ajustar los eventos sin afectar la cadena de señal de de alguna manera.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODVCA* myVca;
Editor y Blueprints:
7. Snapshot (UFMODSnapshot*)
Un Snapshot FMOD es un grupo de cambios que pueden ser disparados y detenidos tal como los Eventos FMOD. Casi cualquier parámetro dentro de tu proyecto FMOD Studio puede ser manipulado por un snapshot.
IMPORTANTE: Para acceder a esta propiedad, debes incluir esta directiva en tu archivo .h:
#include “FMODSnapshot.h“
De Firelight Technologies - FMOD:
A snapshot is an instantiable unit of changes to the project mix that can be triggered, controlled, and stopped from game code in the same manner as an event. Each snapshot represents a different way your game's mix can change in response to the circumstances in your game as it runs.
Traducción:
Un snapshot es una unidad instanciable de cambios a la mezcla del proyecto las cuales pueden ser disparadas, controladas y detenidas desde el código de juego de la misma forma que un evento. Cada snapshot representa una forma diferente de cómo la mezcla de tu juego puede cambiar en respuesta a las cicunstancias.
.h file:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Audio") UFMODSnapshot* mySnapshot;
Exponer Las Propiedades Al Editor y A Blueprints:
Después de escribir todas las Propiedades FMOD en tu archivo "MyCPPActorClass.h”, tu código debería ser similar a esto:
Guarda tu código modificado. Vuelve al proyecto UE y compila.
Arrastra "MyCPPActorClass” en el outliner de tu mapa.
Crea una clase tipo Blueprint basada en “MyCPPActorClass” llamada “MyBPActorClass”. Arrástrala dentro del outliner del mapa, también.
Abre el graph blueprint de “MyBPActorClass”. Deberías ver todas tus propiedades FMOD C++ en la parte inferior-izquierda de tu editor, debajo de Variables > Audio. Si no puedes verlas aún, intenta dar click en el ícono den forma de engranaje en la parte superior-derecha de My Blueprint y selecciona Show Inherited Variables.