Die Audiofunktionen von Unreal Engine 5 können Projekte mit unterschiedlichen Audioanforderungen unterstützen. Du kannst Audiodaten importieren, indem du zu einem Inhaltsordner navigierst und auf die Schaltfläche Importieren klickst oder mit dem Explorer deines Betriebssystems zu dem Ordner navigierst. Die Engine erstellt dann ein .uasset mit deinem Sound. Unreal Engine unterstützt die Dateitypen .wav, .ogg, .flac, .aif, .opus, .mp3 . Dateien mit einer Bittiefe von 16 oder 24 und einer beliebigen Sample-Rate werden unterstützt. Intern speichert Unreal Engine importierte Audiodateien in einer unkomprimierten 16-Bit-Datei mit dem Format .wav .
Weitere Informationen zur Audio Engine in Unreal findest du unter:
Sound-Einsätze sind Objekte, die zum Abspielen von Sounds zur Laufzeit verwendet werden. Sound-Einsätze wählen aus einer Reihe von Audiodateien aus, die dasselbe Konzept darstellen. Du kannst zum Beispiel einen Sound-Einsatz für „Wind“ haben, und zur Laufzeit würde der Sound-Einsatz aus mehreren Audiodateien mit Windgeräuschen für die Wiedergabe auswählen. Ein Beispiel dafür ist der Sound-Einsatz für das Wasserplätschern, das in „Parrot“ zu hören ist: Content/Sound/SFX/WaterSplash/CUE_WaterSplashSound
Soundklassen sind Asset-Typen, die von der Audio-Engine verwendet werden, um mehrere Sounds zusammenzufassen und dann die Parameter aller relevanten Soundwellen gleichzeitig zu ändern. „Parrot“ hat MainSoundClass, die Musik und SFX mischt.
Soundklassenmischungen können Lautstärkeschwellenwerte anwenden und werden automatisch angewendet, wenn ein Sound in einer Soundklasse abgespielt wird.
Spezielle Implementierung in „Parrot“
In „Parrot“ werden meist Sound-Einsätze verwendet, die einen Ton enthalten. Lautstärke und Tonhöhe werden pro Sound-Einsatz eingestellt, wobei die Gesamtlautstärke durch eine Standard-Soundklasse und Soundmischungen für Einstellungen gesteuert wird. Um dies für Musik zu optimieren, hat „Parrot“ ein eigenes Audio-Subsystem entwickelt.
Beispiel „Abholpunkt“
Abholpunkt-Sounds sind ein Beispiel für einfache Sound-Einsätze, die einmal abgespielt und dann zerstört werden. Die Abholpunkt-Sounds verwenden Münzen-Geräusche von opengameart.org. Die importierten Quelldateien befinden sich unter Content/Assets/OpenGameArt/8bitCoinSounds. Die für jede dieser Dateien erstellten Sound-Einsätze befinden sich unter Content/Sound/SFX/Pickups. Rufe Play Sound 2D mit dem gewünschten Sound-Einsatz in BP_PickupBase auf, wenn das Abhol-Event ausgelöst wird.
Alle Abhol-Events unterstützen VFX, SFX, und müssen bei Kontakt zerstört werden. Dies kann in der Klasse BP_PickupBase erfolgen.
Du kannst hier „Play Sound 2D“ verwenden, da der Sound in der Welt nicht räumlich relevant sein muss. Wenn der Sound räumlich relevant sein soll, kannst du stattdessen „Play Sound At Location“ verwenden.
Musikschleifen
Musik funktioniert ähnlich wie die Standard-Sound-Einsätze. Das Importieren der Sounddateien und das Einrichten der Sound-Einsätze ist dasselbe wie bei den Soundeffekten. Es sind jedoch einige zusätzliche Schritte erforderlich:
Achte beim importierten Sound-Asset selbst darauf, dass der Virtualisierungsmodus auf Lautlos abspielen eingestellt ist. Dies ist wichtig für die Musik, da es dem Player ermöglicht, die Lautstärkeeinstellungen zu respektieren. Ohne diese Option wird der Sound zerstört, wenn die Lautstärke stummgeschaltet wird, und wird nicht mehr abgespielt, wenn die Lautstärke wiederhergestellt wird.
Klicke im Sound-Einsatz selbst auf den Track-Knoten und vergewissere dich, dass Looping eingestellt ist.
Sound-Einstellungen
Alle Einstellungen in „Parrot“ beziehen sich auf verschiedene Lautstärken.
Unter Content/Sound/Settings ist ein Soundklassen-Asset namens MainSoundClass. Unter Child Classes kannst du für deine Soundklasse Verweise auf andere relevante Soundklassen einrichten. Zu den Standard-Child-Klassen gehören SFX und Music.
Im selben Ordner befindet sich ein Asset namens DefaultSoundMix. Du kannst Sound Class Effects in den Einstellungen für MainSoundClass festlegen. Vergewissere dich, dass Apply To Children aktiviert ist.
Vergewissere dich, dass die Klasse in jedem Sound-Einsatz auf die entsprechende Kategorie eingestellt ist. Verwende die SFX-Klasse für die Abhol-Events.
Um die Einstellungen deiner Mischung zur Laufzeit zu ändern, kannst du den Knoten Set Sound Class Mix Override mit dem Knoten Push Sound Mix Modifier verwenden. Damit werden alle von dir vorgenommenen Änderungen übernommen.
Dies ist ein Blueprint-Beispiel, aber in „Parrot“ wird dies normalerweise in C++ im Audio-Subsystem durchgeführt.
„Parrot“ Audio-Subsystem
In diesem Abschnitt wird erläutert, was die Implementierung des Audio-Subsystems bewirkt. Um zu erfahren, warum „Parrot“ ein Subsystem für Audio hat, siehe Subsysteme in „Parrot“.
Das „Parrot“ Audio-Subsystem ist eine C++-Klasse mit dem Namen UParrotAudioSubsystem. Diese teilt die Lebensdauer der Spielinstanz, da die Lautstärkeeinstellungen jederzeit über das Hauptmenü oder das Pausenmenü geändert werden können. Während eines Spieldurchgangs hört das Audio-Subsystem auch auf Änderungen des Spielstatus. Dann kannst du den Musiktitel ändern, wenn ein Level beginnt, wenn ein Level beendet ist oder wenn der Spieler die Grenzen überschreitet.
WBP_SettingScreen zeigt das Audio-Subsystem in Aktion. Schiebereglerwerte aus UMG (Unreal Motion Graphics UI Designer) werden in C++ an das Subsystem übergeben. Der Laufzeit-Soundmixer wird bei jeder Änderung der Werte aktualisiert. Die Einblendzeit ist Null, so dass Lautstärkeänderungen sofort übernommen werden.
Die Einstellungen werden mit dem Knoten Save Audio Settings gespeichert.
Wie die Serialisierung zum Speichern dieser Einstellungen im Detail funktioniert, wird unter Serialisierung in „Parrot“ beschrieben.
Die Musik in „Parrot“ wird fast vollständig mit C++ gehandhabt. Aufgrund der Struktur von „Parrot“, bei der jede Karte ein Level darstellt, gibt es eine AParrotWorldSettings-Klasse. Du kannst damit alle weltbezogenen Daten festlegen, z. B. die Levelmusik. Das Audio-Subsystem fragt die Welteinstellungen ab und wählt den benötigten Track aus. Um auf Zustandsänderungen zu reagieren, nachdem das Spiel begonnen hat, muss der Game State von „Parrot“ an WorldBeginPlay gebunden werden.