Las funciones de audio de Unreal Engine 5 son compatibles con proyectos con diferentes requerimientos de audio. Se puede importar audio al navegar a una carpeta contenedora, al hacer clic en el botón Importar o al navegar a la carpeta con el explorador de archivos de tu sistema operativo. El motor entonces crea un archivo .uasset con tu sonido. Unreal Engine es compatible con archivos .wav, .ogg, .flac, .aif, .opus, .mp3 . Los archivos pueden tener una profundidad de bits de 16 o 24 y cualquier frecuencia de muestreo. Internamente, Unreal Engine almacena los archivos de audio importados en formato .wav de 16 bits sin comprimir.
Para obtener más información sobre el motor de audio en Unreal, consulta la siguiente documentación:
Las señales de sonido son objetos utilizados para reproducir sonidos en tiempo de ejecución. Las señales de sonido se seleccionan de un conjunto de archivos de audio que representan ese mismo concepto. Por ejemplo, puedes tener una señal de sonido para “Viento” y, en tiempo de ejecución, la señal de sonido va a elegir reproducir sonidos de viento entre diferentes archivos de audio. Un ejemplo de esto en Parrot es la señal de sonido de salpicadura de agua: Content/Sound/SFX/WaterSplash/CUE_WaterSplashSound
Las clases de sonido son tipos de recurso que el motor de audio utiliza para agrupar varios sonidos diferentes y luego altera los parámetros de todas las ondas sonoras relevantes al mismo tiempo. Parrot tiene la clase MainSoundClass, que mezcla tanto música como SFX.
Las mezclas de clase de sonido pueden aplicar umbrales de volumen y se aplican automáticamente al reproducir un sonido en una clase de sonido.
Implementación específica para Parrot
En Parrot, la mayoría de los sonidos utilizados son señales de sonido que contienen un sonido. El volumen y el tono se configuran para cada señal de sonido y el volumen general es controlado por una clase de sonido predeterminada y mezclas de sonido para la configuración. Para optimizar esto para la música, Parrot cuenta con un subsistema de audio personalizado.
Ejemplo de recolección
Las recolecciones son un ejemplo de señales de sonido sencillas que se reproducen una vez y luego se destruyen. Las recolecciones usan efectos de sonido de monedas de opengameart.org. Los recursos de origen importados se encuentran en Content/Assets/OpenGameArt/8bitCoinSounds. Las señales de sonido creadas para cada uno de estos archivos se encuentran en Content/Sound/SFX/Pickups. Cuando inicia el evento de recolección, llama a Play Sound 2D con la señal de sonido deseada en BP_PickupBase.
Todas las recolecciones son compatibles con VFX y SFX, y deben ser destruidas al entrar en contacto. Esto se puede hacer en la clase BP_PickupBase.
Puedes usar Play Sound 2D aquí porque el sonido no necesita ser espacialmente relevante en el entorno. En caso de que el sonido necesite ser espacialmente relevante, puedes usar Play Sound At Location.
Bucles de música
La música funciona de manera similar a las señales de sonido estándar. La importación de archivos de sonidos y configuración de señales de sonido es igual que con los efectos de sonido. Sin embargo, hay algunos pasos adicionales:
Asegúrate de que en el recurso de sonido importado el modo de virtualización esté establecido en Reproducir en silencio. Esto es importante para la música, ya que permite al reproductor respetar los ajustes de volumen. Sin esto, el sonido se destruirá cuando el volumen se silencie y ya no volverá a reproducirse cuando se vuelva a subir el volumen.
En la señal de sonido, haz clic en el nodo de pista y asegúrate de que En bucle esté activado.
Configuración de sonido
Todos los ajustes en Parrot están relacionados a diferentes volúmenes de sonido.
En Content/Sound/Settings hay un recurso de clase de sonido llamado MainSoundClass. En Clases derivadas puedes dirigir tu clase de sonido a otras clases de sonido relevantes. Las clases derivadas predeterminadas son SFX y Music.
En la misma carpeta hay un recurso llamado DefaultSoundMix. Puedes establecer Efectos de clase de sonido en los ajustes de MainSoundClass. Asegúrate de que Aplicar a los derivados esté habilitado.
Asegúrate de que en cada señal de sonido la clase esté establecida en la categoría adecuada. Para las recolecciones, usa la clase SFX.
Para modificar los ajustes de mezcla en tiempo de ejecución, puedes usar el nodo Set Sound Class Mix Override con el nodo Push Sound Mix Modifier. Esto aplica los cambios que hayas realizado.
Este es un ejemplo de blueprint, pero en Parrot esto suele hacerse en C++ en el subsistema de audio.
Subsistema de audio de Parrot
En esta sección se explica lo que hace la implementación del subsistema de audio. Para conocer por qué Parrot tiene un subsistema para el audio, consulta Subsistemas en Parrot.
El subsistema de audio de Parrot es una clase en C++ llamada UParrotAudioSubsystem. Comparte la duración de la instancia del juego, ya que los ajustes de volumen pueden ser cambiados en cualquier momento desde el menú principal o el menú de pausa. Cuando se está jugando al juego, el subsistema de audio también detecta cambios en el estado del juego. Entonces, puedes cambiar la pista de música cuando inicia un nivel, cuando se completa un nivel o cuando el jugador sale de los límites.
WBP_SettingScreen muestra el subsistema de audio en acción. Los valores de control deslizante de UMG (Unreal Motion Graphics UI Designer) se pasan al subsistema en C++. El mezclador de sonido en tiempo de ejecución se actualiza cuando los valores cambian. El tiempo de Fundido es cero para que los cambios de volumen se apliquen inmediatamente.
Los ajustes se guardan con el nodo Save Audio Settings.
Para ver los detalles de cómo funciona la serialización para guardar estos ajustes, consulta Serialización en Parrot.
La música en Parrot se hace casi en su totalidad en C++. Debido a la estructura de Parrot, donde cada mapa es un nivel, existe la clase AParrotWorldSettings. Puedes utilizarla para establecer datos específicos del entorno, como la música del nivel. El subsistema de audio consulta la configuración del entorno y trae la pista necesaria. Para reaccionar a los cambios de estado una vez que ha comenzado el juego, vincula el estado de juego de Parrot en WorldBeginPlay.