En este tutorial, aprenderás a crear música procedimental usando MetaSounds. Crearás música ambiental generada de forma procedimental para tu juego de aventuras.
MetaSounds es un sistema de audio de alto rendimiento que puede generar fuentes de sonido mediante un sistema basado en nodos, similar al sistema de secuenciación de comandos visual de Blueprint.
Antes de empezar
Asegúrate de que entiendes los temas tratados en la Unreal Engine para nuevos usuarios:
Aspectos básicos de los blueprints, como añadir y conectar nodos.
Cómo crear música procedimental con MetaSounds
Primero, crearás un recurso de MetaSound. Sigue estos pasos:
Ve al explorador de contenido y navega hasta la carpeta Content > AdventureGame > Artist > Audio.
En la carpeta Audio, crea una nueva carpeta llamada Music.
Haz clic derecho dentro de la carpeta Music y selecciona Audio > Fuente de MetaSound.
Nombra este recurso
MS_BGM, que hace referencia a Música de fondo de MetaSound.Abre el recurso.
El recurso se abre en el editor de MetaSound. En la nueva ventana, verás tres nodos en el grafo: Input, Output On Finished y Input Out Mono.
El activador Input se ejecuta cuando se reproduce esta fuente de audio. Un MetaSound siempre comienza con una entrada.
El activador Output on Finished se ejecuta para detener la reproducción de la fuente. Si detienes el audio desde otro lugar, como un blueprint, no tienes que usar este nodo para detener la reproducción de la fuente de audio. En este caso, usarás un blueprint para iniciar y detener el audio, por lo que no tendrás que usar este nodo.
El nodo Output Out Mono representa la salida de audio final del grafo de MetaSound, dirigiendo todas las señales de audio ascendentes a una salida de un solo canal (mono). Todos los nodos conectados a él se mezclan y se envían al motor como salida de sonido.
Cómo fijar el tempo y el ritmo de la música
Primero, crearás los nodos para establecer el tempo y el ritmo de la música. Sigue estos pasos:
Arrastra el pin del nodo Input y añade un nodo Trigger Repeat.
En el nodo Trigger Repeat, arrastra el pin Period y añade un nodo BPM To Seconds. Establece las divisiones de nota entera en 16.
En el nodo BPM To Seconds, arrastra el pin BPM y selecciona Promote to Graph Input.
En el panel Miembros situado en la esquina superior izquierda de la pantalla, cambia el nombre de Inputde BPM a Note In.
En el panel Detalles, cambia el valor por defecto del nodo Note In a 60. También puedes cambiar este valor en la parte inferior del nodo.
Desde el nodo Trigger Repeat, arrastra el pin RepeatOut y añade un nuevo nodo Trigger Counter.
Selecciona el nodo Trigger Counter y establece que Reset Count sea 8.
Esta sección establece el tempo y el ritmo. Además, puedes resaltar los cuatro nodos que has añadido (Trigger Counter, Trigger Repeat, BPM To Seconds e Input) y pulsar C para añadir una caja de comentarios que incluya todos los nodos. Llama a esta caja de comentarios Tempo y ritmo.
Cómo generar una melodía
A continuación, crearás la función que genera la melodía usando el tempo y el ritmo que hayas definido. Sigue estos pasos:
Desde el nodo Trigger Counter:
Arrastra el pin On Trigger y añade un nodo Random Get (Float:Array).
Arrastra el pin On Reset del nodo Trigger Counter y conéctalo al pin Reset del nodo Random Get.
Desde el nodo Random Get , arrastra el pin In Array y añade un nodo Scale to Note Array.
Desde el nodo Scale to Note Array, arrastra el pin Scale Degrees, selecciona Promote to Graph Input y llámalo Scale.
Desde el nodo Random Get, arrastra el pin Seed y añade un nodo Random (Int).
En el nodo Random (Int) , arrastra el pin Next y conéctalo al pin On Reset del nodo Trigger Counter.
Esta sección genera la melodía. Una vez más, puedes resaltar todos los nodos nuevos y añadir una caja de comentarios llamada Generación de melodía.
Cómo sintetizar la melodía
A continuación, crearás la síntesis para dar forma a cómo sonará esa melodía. Esto implica convertir las notas de la melodía generadas en sonido audible. Sigue estos pasos:
En el nodo Random Get, arrastra el pin Value y añade un nodo Add (Float).
En el nodo Add, cambia el valor del segundo pin de entrada de 0 a 48.
Desde el nodo Add, arrastra el pin de ejecución y añade un nodo MIDI To Frequency (Float).
Desde el nodo MIDI To Frequency (Float), arrastra el pin Out Frequency y añade un nodo Sine.
Desde el nodo Sine, arrastra el pin de salida Audio y añade un nodo Add (Audio).
Añadirás un nodo Sine más que se conectará a este nodo Add. Entonces, desde el nodo Add, arrastra el otro pin de entrada y añade un nodo Sine.
En el nuevo nodo Sine, arrastra el pin Frequency y añade un nodo MIDI To Frequency (Float).
Desde el nodo MIDI To Frequency, arrastra el pin MIDI In y añade un nodo Add (Float).
En el nodo Add:
Conecta el primer pin de entrada al nodo Add que está conectado al primer nodo Sine.
Arrastra el segundo pin de entrada y selecciona Promote to Graph Input. Llámalo Detune.
Selecciona la entrada Detune y, en el panel Detalles, cambia su rango a 0 y 12.
En el panel Detalles, cambia el valor predeterminado a 12.
Ya has sintetizado la melodía que se generará. Puedes volver a añadir una caja de comentarios para esta nueva sección y llamarla Síntesis.
Cómo dar forma al sonido con una envolvente
A continuación, añadirás una envolvente para dar forma a cómo evoluciona el sonido con el tiempo, controlando su inicio, sostenido y fundido de salida para conseguir un resultado más natural.
Para añadir una envolvente, sigue estos pasos:
Desplázate hasta la sección de generación de melodía que has creado anteriormente (si has añadido una caja de comentarios, debería llamarse Generación de melodía). Desde el nodo Random Get (Float:Array), arrastra el pin On Next y añade un nodo AD Envelope (Audio). Mueve este nuevo nodo después de los dos nodos Sine que añadiste en la sección de síntesis.
Desde este nodo, arrastra el pin Out Envelope y añade un nodo Multiply (Audio).
Desde este nodo Multiply, arrastra el segundo pin de entrada y conéctalo al pin de salida del nodo Add (Audio) al que conectaste los dos nodos Sine.
En el nodo AD Envelope (Audio), cambia el valor de Decay Time a 0.2.
Desde el nodo Multiply (Audio), arrastra el pin de salida y conéctalo al nodo Output Out Mono que ya estaba en la fuente de MetaSound.
Ahora, pulsa el botón de reproducción de la barra de herramientas que hay cerca de la parte superior de la ventana de la fuente de MetaSound. Reproducirá continuamente música generada de forma procedimental.
Para obtener más información sobre la creación de música procedimental en Unreal Engine, consulta la página Creating Procedural Music with MetaSounds.
Cómo reproducir la música en el juego con blueprints
Antes de continuar, crearás un blueprint que reproducirá la música de fondo del nivel.
Dado que este blueprint se añadirá al nivel pero no tiene una representación visual, añadirás un componente Valla publicitaria al blueprint. Este componente añade un sprite en 2D que lo hace visible en el editor para que puedas encontrarlo mientras editas el nivel, pero no será visible en el juego.
Para crear el blueprint de música de fondo, sigue estos pasos:
Ve al explorador de contenido y navega hasta Content > AdventureGame > Artist > Audio > Music.
Haz clic derecho y crea una nueva clase de blueprint que derive de la clase padre Actor. Llámala BP_BGM (hace referencia a blueprint de música de fondo).
En el panel Componentes , haz clic en Añadir y añade un componente Valla publicitaria. En el panel Detalles puedes ver que el sprite está configurado como S_Actor por defecto. Puedes cambiar el sprite o dejarlo como está.
Ve a la pestaña EventGraph para empezar a compilar la funcionalidad.
Arrastra desde el nodo Event BeginPlay y añade un nodo Branch.
En el nodo Branch, arrastra el pin Condition y selecciona Promote to variable. Dale a esta variable el nombre Active. Se usará para determinar si esta fuente de audio está activa o no.
En la lista Variables del panel My Blueprint, haz clic en el icono del ojo junto a la variable Active para abrir el ojo y hacerlo público y editable en el editor de niveles.
Compila el blueprint, usa el panel Ddetalles para garantizar que el valor predeterminado de la variable activa sea verdadero (habilitado).
En el nodo Branch, arrastra el pin True y añade un nodo Play Sound 2D.
En el nodo Play Sound 2D, usa el desplegable para establecer el pin Sound en MS_BGM.
En el nodo Play Sound 2D, haz clic en la flecha hacia abajo para ampliar las opciones del nodo. Arrastra el pin Volume Multiplier y selecciona Promote to Variable.
Haz clic en el icono del ojo de la variable para que sea pública y editable, compila el blueprint y cambia su valor predeterminado a 0.5.
Guarda y compila tu blueprint.
El «2D» del nodo Play Sound 2D indica que el sonido se reproducirá independientemente de la posición del jugador en el nivel. En otras palabras, no está espacializado en el espacio en 3D, por lo que la distancia y la dirección no afectan a cómo lo oye el jugador.
Cómo probar tu música en el juego
Ahora puedes volver al editor de niveles y añadir el blueprint BP_BGM a tu nivel.
Selecciona el actor BP_BGM en el nivel y, en el panel Detalles, asegúrate de que las dos variables que has añadido estén configuradas correctamente: Active debería estar activado y Multiplicador de volumen debería fijarse en 0.5.
Puedes probar distintos valores para el multiplicador de volumen y ver cuál funciona mejor para tu caso concreto. Dado que se trata de la música de fondo, es posible que quieras ajustar el volumen en valores bajos para mantener el tono sutil.
Ahora, juega al juego. Deberías oír cómo la música que creaste se reproduce de fondo.
Siguiente
En el siguiente módulo aprenderás a añadir efectos de sonido dinámicos de las pisadas a tu personaje jugable, que reproducen distintos sonidos en función del tipo de suelo por el que se esté moviendo el personaje.