Skip to content

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 ULBRAudioAsset hides the concrete audio class from the generator. The default backend uses Unreal USoundBase assets; 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 ULBRAudioTrackGenerator produces 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.

  1. Add the LibrettoWwise plugin to your project (alongside the main Libretto plugin) and enable it, together with the Audiokinetic Wwise plugin it depends on.

  2. 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.

  3. Set the audio asset class. In Project Settings ▸ Libretto, set AudioAssetClass to the Wwise audio asset (ULBRWwiseAudioAsset). This replaces the default USoundBase-based asset.

  4. Swap the audio track generator. In Project Settings ▸ Libretto – Sequence Generator, replace the default LBRAudioTrackGenerator in the generators list with the Wwise track generator (ULBRWwiseTrackGenerator).

  5. 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:

  1. It calls ak.wwise.core.audio.import to 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.

  2. Naming. The original file keeps its name. The Sound Voice is named by ULBRCoreUtils::GetTtsAssetGeneratedName (for TTS sources) or ULBRCoreUtils::GetVoiceAssetGeneratedName (for final voices) — the VX_DialogueName_ID convention. The generated playback event is the Sound Voice name suffixed with _Play.

  3. It calls ak.wwise.core.project.save and then ak.wwise.core.soundbank.generate (Windows platform only) to persist the project and refresh the SoundBank data.

  4. 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.