Wwise integration (LibrettoWwise)¶
LibrettoWwise is an optional, separately published extension to Libretto. It routes a
dialogue's audio — both temporary TTS previews and final recorded voice — through
Audiokinetic Wwise instead of Unreal's built-in USoundBase
assets.
It is shipped apart from the main Libretto plugin, on purpose: most projects do not use Wwise, and the integration pulls in a hard dependency on the Audiokinetic Wwise plugin. If your project uses Wwise for audio and you need LibrettoWwise, reach out to us on Discord — it is not available directly on Fab.
Prerequisite — the Audiokinetic Wwise plugin
LibrettoWwise requires the Audiokinetic Wwise Unreal plugin to be installed and enabled in your project, and a Wwise project connected over WAAPI (the Wwise Authoring API). Install Wwise and set it up in your project as documented by Audiokinetic before enabling LibrettoWwise. Importing voices and querying sound durations at generation time both require Wwise to be running and connected.
Class names
LibrettoWwise ships as its own plugin. Its two concrete classes are ULBRWwiseAudioAsset
(a subclass of ULBRAudioAsset) and ULBRWwiseTrackGenerator (a subclass of
ULBRAudioTrackGenerator); its settings live in ULBRWwiseSettings (category
Libretto – Wwise). These names are verified against the LibrettoWwise source.
How it fits into Libretto¶
Libretto abstracts "where the audio comes from" behind two extension points, so an audio backend can be swapped without touching the rest of the pipeline:
- The audio asset. The abstract base
ULBRAudioAssethides the concrete audio class from the generator. The default backend uses UnrealUSoundBaseassets; LibrettoWwise supplies a Wwise-backed subclass instead. The base class explicitly anticipates alternative backends such as Wwise or FMod. - The audio track generator. The base
ULBRAudioTrackGeneratorproduces the audio track in each generated Sequencer asset. LibrettoWwise supplies a Wwise-aware subclass that lays down the right Wwise events on the track.
Enabling the extension is therefore mostly a matter of pointing Libretto's settings at the two Wwise classes.
Enabling LibrettoWwise (once per project)¶
Obtaining LibrettoWwise
LibrettoWwise is not available on Fab. Contact us on Discord to obtain it.
-
Add the LibrettoWwise plugin to your project (alongside the main Libretto plugin) and enable it, together with the Audiokinetic Wwise plugin it depends on.
-
Connect Unreal to Wwise. With your Wwise project open, Unreal shows a Wwise Browser panel; the indicator at the bottom tells you whether Unreal is connected to the Wwise application. To have it connect automatically on startup, tick Auto Connect to WAAPI in the project settings.
-
Set the audio asset class. In Project Settings ▸ Libretto, set
AudioAssetClassto the Wwise audio asset (ULBRWwiseAudioAsset). This replaces the defaultUSoundBase-based asset. -
Swap the audio track generator. In Project Settings ▸ Libretto – Sequence Generator, replace the default
LBRAudioTrackGeneratorin the generators list with the Wwise track generator (ULBRWwiseTrackGenerator). -
Configure the Wwise roots. A Libretto – Wwise settings category holds the paths used when importing into the Wwise project and when creating playback events:
Setting Purpose Text to Speech Wwise Root Root path under which TTS audio files are imported into Wwise. Voice Wwise Root Root path under which final recorded voice files are imported into Wwise. Text to Speech Events Wwise Root Path under which the playback events for TTS voices are created. Voice Events Wwise Root Path under which the playback events for final voices are created. Import Language The language declared to Wwise at import time.
Once these are set, generation transparently produces Wwise assets and Wwise-backed audio tracks in place of the Unreal-native ones. The TTS and recording flows are otherwise unchanged.
How voice import into Wwise works¶
This section explains the mechanics for anyone extending or debugging the system. The concrete
Wwise audio asset (ULBRWwiseAudioAsset) is a subclass of ULBRAudioAsset and
is wired directly into generation via the Text-to-Speech generators. Wwise must be running and
connected for any of it to work.
The entry point is the base class's import function — ImportWavFile — which takes the path of
a .wav file plus an ELBRAudioType flag saying whether it should be treated as a final
voice source or a temporary TTS source. (The format is not hard-coded to WAV, so other formats
should work too.)
The Wwise subclass drives WAAPI as follows:
-
It calls
ak.wwise.core.audio.importto import the file as a Sound Voice object, under a directory derived from the dialogue's relative path — the same relative layout used when generating the Sequencer assets. The original file, the Sound Voice, and the playback event all land under that same relative path. -
Naming. The original file keeps its name. The Sound Voice is named by
ULBRCoreUtils::GetTtsAssetGeneratedName(for TTS sources) orULBRCoreUtils::GetVoiceAssetGeneratedName(for final voices) — theVX_DialogueName_IDconvention. The generated playback event is the Sound Voice name suffixed with_Play. -
It calls
ak.wwise.core.project.saveand thenak.wwise.core.soundbank.generate(Windows platform only) to persist the project and refresh the SoundBank data. -
Finally, the equivalent Unreal assets are created following the same naming convention, so the generated Sequencer content can reference them.
The _Play events
Every imported voice gets a matching <VX_DialogueName_ID>_Play event. These are what the
Wwise track generator places on the audio track, and what plays the line at runtime.
Connection required at generation
Because import and duration queries both go through WAAPI, generating (or regenerating) a dialogue with the Wwise backend requires the Wwise application to be open and connected. If generation reports missing audio or zero-length lines, check the Wwise Browser connection first.