Introduction

Alien: Isolation's audio runs through Wwise. Scripts don't reference audio files — they fire sound events by name, and Wwise decides what that means: which take to play, whether to pick at random, which bank the audio comes from.

Whenever you set a sound event on an entity parameter, OpenCAGE opens the sound event selector. That window has a player along its bottom edge, so you can hear what an event actually sounds like before committing to it — and export or replace the audio behind it.

Events, Banks & Variations

Three ideas are worth having straight before you start changing things:

  • An event is the name a script fires. It is not a file.
  • A soundbank is the container the audio ships in. The same event can appear in several banks, because banks are loaded per level.
  • A variation is one of the actual takes behind an event. Most interesting events sit behind a random or switch container and pick between several takes at runtime — footsteps, impacts, and vocalisations especially.

The player exposes every variation it managed to resolve, which is the only way to hear what an event will really sound like in the game rather than one arbitrary take of it.

The first time you open the selector, OpenCAGE starts indexing the game's soundbanks in the background so the first sound you click is ready rather than waiting on a cold index.

Playing a Sound in a Script

Two entities do the work, and you generally need both:

  • Sound — plays a sound event. Set its sound_event parameter and trigger it; that parameter is what opens the selector described on this page.
  • SoundLoadBank — loads the soundbank the event lives in. The audio isn't resident until something loads its bank, so a Sound entity firing an event from an unloaded bank plays nothing.

Which bank to load is exactly what the Metadata button tells you — select the event, read off the soundbank it's listed in, and point a SoundLoadBank at that. See Soundbank Metadata.

Banks that are permanently resident don't need loading; those are configured separately under Permanent Soundbanks.

Dialogue

Character dialogue is fired the same way — through sound events — but by entities that also know which character is speaking, so the line comes from the right place and drives the right face:

  • Speechone line on one character. Takes a character to speak it (plus an alt_character), and like Sound it inherits its sound_event from SoundPlaybackBaseClass. speech_priority decides what it interrupts or is interrupted by, and queue_time is how long it will wait for a slot before giving up. Fires on_speech_started.
  • SpeechScripta whole exchange. Takes up to five characters (character_01character_05, each with an alt) and up to ten lines. Each line has a line_NN_event for the sound event, a line_NN_character naming which of the five slots delivers it, and — from the second line onwards — a line_NN_delay for the pause before it. Fires on_script_ended when the last line finishes.

Use Speech for a barked line or a one-off; use SpeechScript for back-and-forth conversation, where hand-wiring a chain of Speech entities and delays would be far more work.

Both still need their bank loaded, so the MetadataSoundLoadBank step above applies to dialogue as much as to any other sound.

Previewing a Sound

Select an event in the list and the player fills in. Controls, left to right:

  • Play / Stop, with a seek bar and elapsed time you can scrub
  • A variations dropdown listing every take behind the event
  • Shuffle — jump to a random variation, which is roughly what the game does
  • Export and Replace — see below
  • Auto-play — start playing as soon as you select an event, so you can arrow through a list and hear each one

Audio is decoded on demand rather than up front, so a long sound may take a moment before it starts.

Exporting Audio

Export writes the variation currently selected out as a .wav. The file is decoded from whatever the game stores it as, so you get plain uncompressed audio you can open anywhere.

Exporting waits for the decode to finish first, which for a long sound is a few seconds — the button greys out while it works.

Note that this exports one variation, not the whole event. If an event has eight footstep takes and you want all of them, export each in turn.

Replacing Audio

Replace swaps the audio behind the selected variation for a .wav of your own. OpenCAGE encodes it into exactly the form the game's decoder expects and writes it into the soundbanks that hold it.

Everything is checked before anything is written. If the audio can't be imported, you're told why and nothing changes — you won't be left with a half-edited soundbank. If it can, you get a summary first:

  • Mono or stereo, duration, and sample rate
  • What it was encoded to, and at what quality
  • How big the new audio is against the audio it replaces
  • Any notes worth knowing before you commit

Confirm and the replacement is applied.

Preparing a WAV

Replacement audio must be a .wav. A few things to keep in mind:

  • Match the original's channel count where you can. Replacing a mono sound with a stereo file changes how the engine positions it in 3D space.
  • The encoding follows the original. On PC everything is Wwise Vorbis. The Switch build also stores some sounds as Wwise ADPCM and a few as plain PCM — OpenCAGE encodes to whichever codec the sound it's replacing used, so the game can still read it.
  • Size matters, but isn't fatal. The summary tells you how the new audio compares to the old; a much larger file grows the container it lives in.
  • A variation with no audio of its own can't be replaced. Some entries in a container are references rather than media — the player says so if you try.

Every Copy is Replaced

The same audio is often shipped in several banks at once, because banks are loaded per level and a sound used in three levels lives in three places.

A replacement therefore updates every copy the game ships, not just the one you were listening to. If it only changed one, the old sound would come back in whichever level loaded a different bank — which reads as a bug in the game rather than an unfinished edit.

If some copies write and others fail, OpenCAGE says so explicitly rather than reporting success, since a partial replacement leaves the sound changed in some places and not others.

Sound edits are global. Soundbanks aren't per-level data — replacing a sound changes it everywhere in the game, for every level, and there's no per-level override. Take a backup before doing this at scale.

Soundbank Metadata

With an event selected, the Metadata button lists every soundbank the event appears in. That tells you which levels can actually fire it — an event that isn't in a bank your level loads won't play, however correctly the script is wired.

This is where you get the bank name to give a SoundLoadBank entity, so the event you're about to fire is actually loaded — see Playing a Sound in a Script.

If the event isn't listed in any soundbank at all, it says so. That usually means the name is wrong or the event belongs to content that isn't shipped.

Which banks are permanently resident is configured separately — see Permanent Soundbanks.