Audio Authoring with ISACT in LE1 - ME3Tweaks/LegendaryExplorer GitHub Wiki

Note: This article describes upcoming changes to LEX. I'll remove this note when they become available in nightly.

Requirements

Overview

This guide explains how to use Sound Explorer in LEX to build and maintain ISACT Content Bank (.icb) and ISACT Sample Bank (.isb) pairs for LE1. It replaces the stages that previously required manually authoring banks in ISACT Production Studio.

This page doesn't repeat the underlying LE1 audio concepts. For an explanation of streaming audio, non-streaming audio, SoundCues, SoundNodeWaves and BioSoundNodeWaveStreamingData, read Editing LE1 Audio.

This workflow covers streaming audio used by:

  • BioConversation voiceover
  • Codex voiceover
  • Character Soundsets
  • Music

It does not cover non-streaming sound effects stored directly inside some SoundNodeWave exports.

Your source audio should be signed 16-bit PCM WAV. If a WAV uses another format, LEX can create a compatible temporary copy before passing it to BankBuilder. Your source files are not modified.

Place all the WAVs for one operation into a single folder. Only WAVs directly inside that folder are processed; subfolders are ignored. Do not mix files intended for different banks or content types.

ISACT Menu

File Name & Sound Event Rules

LEX uses WAV filenames to generate Sound Events in the ICB. The required part of each name depends on the selected content type.

Even where the entire name is not technically required, matching BioWare's naming conventions is strongly recommended. It makes the purpose and localisation of loose source files considerably less mysterious six months later.

Filenames cannot contain spaces.

Locales

Source WAVs should use the following locale prefixes unless they are music:

Language WAV prefix
English EN_
German DE_
French FR_
Italian IT_
Polish PLPC_
Russian RA_

English WAVs use EN_, not INT_. INT is the game localisation used for English audio, including when the game is displaying Spanish or Japanese text.

The filename prefix does not select the output localisation (example: if you're outputting to a _LOC_DE.pcc file for German VO). Choose the matching localisation separately in the Build or Rebuild window.

BioConversation

Recommended format:

[locale]_[BioConversation name]_00[string ID]_M.wav

Example:

EN_nor20_ian_ferguson_00121875_M.wav

LEX reads the numeric string ID from the end of the filename and generates both conversation Sound Events inside the ICB:

VO_121875
VO_121875_M

Use _M as the default suffix for ordinary NPC dialogue. BioConversations expect both male and female Sound Event names even when the spoken audio is identical.

Use _F for a FemShep line. When a player line has separate male and female recordings, provide both WAVs with the same string ID:

EN_example_conversation_00121875_F.wav
EN_example_conversation_00121875_M.wav

The _F sample is linked to VO_121875, while the _M sample is linked to VO_121875_M.

Codex

Intended recommended format:

[locale]_vo_codex_[entry name].wav

Example:

EN_vo_codex_organizations_mercenaries_eclipse_entry.wav

Codex entries do not use BioConversation's male/female duplication. Each WAV creates one Sound Event using the Codex name.

Soundsets

Recommended format:

[locale]_[soundset name]_[cue code][two-digit index].wav

Example:

EN_eclipsemerc_atg00.wav

LEX reads the cue code and two-digit index from the end of the filename. The example above generates:

VO_AttackGrunt_00

This is a full list of the cue codes I was able to find in the game. Unknown cue codes are rejected rather than being cheerfully invented so if any are missed, let me know and we can add support for them:

Code Sound Event name
acl Allclear
alr Alert
atg AttackGrunt
bfa BuffActivated
dth DeathCry
gcf GiveCommandFollow
hpn HoldingPosition
hsq HealingSquad
idl Idle
igr IncomingGrenade
jmp Jump
lkf LOSunavailable
lnd Land
lse LOSestablished
lwh LowHealth
mov Move
mtf MoveToFailure
mts MoveToSuccess
pae PerceptionAttackedByEnemy
phe PerceptionHearEnemy
png PainGrunt
prc PlayerRecovery
sb SpecialAbilityRacial; see below
shd ShieldsDown
smv StartMoveToConfirmation
tbd TechBeaconDeployed
tdr TacticalDeathRecovery
tgd TargetDown
tgr ThrowGrenade
vdm VehicleDamaged
vsd VehicleShieldsDown

Racial ability cues use sb, followed by a one-digit variant and a two-digit index:

EN_example_sb100.wav -> VO_SpecialAbilityRacial1_00
EN_example_sb200.wav -> VO_SpecialAbilityRacial2_00

Music

Recommended format:

mus_[track name].wav

Example:

mus_normandy_ambient.wav

The filename without .wav becomes the Sound Event name. The bank name must also begin with mus_.

Build ISACT Banks Tutorial

Open Sound Explorer and select ISACT > Build ISACT Banks.

Build ISACT Banks

This is what each field does:

  1. WAV source folder selects the folder containing the source WAVs for this bank.
  2. Content type controls how filenames are converted into Sound Event names. Choose BioConversation, Codex, Soundset or Music.
  3. Create a looping Sound Queue is shown for Music. Enable it only when the bank requires a looping queue; ordinary music Sound Events do not require it.
  4. Bank name sets the base name of the ICB and ISB. For BioConversation voiceover, this should normally match the BioConversation name. Music bank names must begin with mus_.
  5. Localisation selects the LE1 audio localisation. This adds the correct suffix to the ISB and package objects. INT has no suffix.
  6. Output folder receives the final compressed ICB and ISB.
  7. BankBuilder.exe points to the copy supplied with ISACT 1.6.4. LEX attempts to find the default installation automatically.
  8. Stream packet (ms) controls the streaming packet duration. LE1 dialogue commonly uses 2500; selecting Music changes the default to 2000.
  9. Vorbis quality controls BankBuilder's Ogg Vorbis compression quality. 0.8 is the usual LE1 value.
  10. Convert incompatible WAVs allows LEX to make temporary signed 16-bit PCM copies when necessary. It preserves the source WAVs, sample rate and channel count.
  11. Copy the finished ISB into a DLC Content folder optionally installs the ISB directly into your mod. Select DLC_MOD_Example/Content, which sits next to CookedPCConsole.
  12. Create or update BioSoundNodeWaveStreamingData in a package optionally imports the compiled bank metadata into an LE1 PCC.
  13. Package file selects the package to update.
  14. BioStreamingData export selects an existing BioSoundNodeWaveStreamingData export. If the package does not contain one, choose Create new BioStreamingData.

Press Build. LEX creates the source banks, runs BankBuilder, validates the compressed result and writes the final ICB and ISB to the output folder.

No source WAVs are modified or deleted. Existing output files with the same names may be replaced, so do not point the output at your only copy of something precious. You have been warned!

Installing the ISB

The final ISB contains the compressed audio and must be installed in your DLC mod's Content folder:

DLC_MOD_Example
├── Content
│   └── example_bank.isb
└── CookedPCConsole

It does not need to be nested inside Content/Packages/ISACT despite basegame handling it this way.

Updating BioSoundNodeWaveStreamingData

The final ICB and the ISB's playback metadata are stored in a BioSoundNodeWaveStreamingData export. If the selected package does not already contain one, LEX creates the required export hierarchy automatically.

The BioStreamingData must be updated whenever the external ISB changes. The package stores sample sizes and offsets used to locate audio inside the ISB; an old copy can therefore point at the wrong data even when the ICB itself has not changed.

If the same BioStreamingData is duplicated across several packages, update every copy. This is most common with Soundsets and occasionally occurs with BioConversations. Updating one package does not psychically update its siblings.

This tool does not generate the SoundCues or SoundNodeWaves that reference the BioStreamingData. Those must already exist or be created separately.

Package selection and BioStreamingData export dropdown

Rebuild ISACT Banks Tutorial

Rebuild ISACT Banks functions similarly to building new banks, except it appends new samples and Sound Events to an existing final bank pair. Only the new WAVs are sent through BankBuilder, so a large bank does not get recompressed every time one new line is added.

Rebuild ISACT Banks

Complete the fields in order:

  1. WAV source folder must contain only the new WAVs being appended.
  2. Existing ISB selects the compiled sample bank being expanded. The bank name and localisation are inferred from its filename.
  3. Content type must match the kind of Sound Events being added.
  4. Output folder receives the rebuilt ICB and ISB. It may be the same location as the originals if you intend to update them in place.
  5. BankBuilder.exe, Stream packet, Vorbis quality and Convert incompatible WAVs work as described in the Build tutorial.
  6. Copy the finished ISB optionally updates the copy in your DLC Content folder.
  7. Package file and BioStreamingData export select the package metadata that should be updated.
  8. Existing ICB (optional) selects a saved copy of the matching final ICB.

Your WAV source folder should not contain all the old source WAVs. Rebuild is an append operation, not a clean build from source. If old files generate Sound Events already present in the ICB, LEX rejects them as duplicates. To change the audio for an existing sample, use the individual replacement workflow instead.

Existing ICB or package extraction

If you kept the existing ICB, select it in Existing ICB. This allows LEX to rebuild the bank pair without first recovering the ICB from a package.

If the ICB was discarded after import or you lost it, leave the field blank. Select a package and its matching BioStreamingData export instead; LEX extracts the embedded ICB and confirms that its recorded ISB title matches the selected external ISB.

After rebuilding, update every package containing a copy of that BioStreamingData by replacing the export data, just as with a new build.

Replace Individual WAV Tutorial

If you want to replace individual WAVs in vanilla files, or just update them in your existing banks, you can now finally use the Replace button that's been unavailable in LE1 for years.

  1. Open Sound Explorer.
  2. Open the final .isb file.
  3. Select the sample you want to replace.
  4. Click Replace in the Soundpanel.
  5. Select the replacement WAV.
  6. Choose whether to select a package containing the matching BioStreamingData.

![Loaded ISB with a sample selected and the Replace button highlighted(https://i.imgur.com/twhuqti.png)

LEX creates a one-sample temporary bank and uses BankBuilder to compress the replacement. It then swaps that compiled sample into the ISB while preserving the original sample name and index. No Sound Events are added, removed or renamed, so the ICB does not change.

This differs from Wwise replacement because the audio is being rebuilt inside an external ISACT sample bank rather than appended to an AFC and referenced by a WwiseStream.

Replacing a sample can change its compressed size, which shifts later sample offsets in the ISB. The matching BioStreamingData metadata must therefore be refreshed even though the ICB is unchanged. LEX can refresh one selected package as part of the replacement. If the BioStreamingData exists in several packages, once again you'll need to update that export manually for all instances.

If the ISB replacement succeeds but package refresh fails, the new ISB is kept and LEX reports the metadata error separately. Do not test it in game until the relevant package copies have been updated.

Replacement does not rename a sample, change its index, or add a new Sound Event. Use Rebuild when adding new content.

Extracting Audio

Open an ISB in Sound Explorer, then select ISACT > Extract all audio from this file and choose an output folder. This works exactly the same way as it always has, just inside the ISACT menu.

Limitations

  • The workflow creates and maintains ICB/ISB banks and BioSoundNodeWaveStreamingData. It does not create the SoundCues or SoundNodeWaves required to play newly authored content.
  • Rebuild is append-only. It does not remove or rename existing Sound Events, and duplicate event names are rejected.
  • Existing music banks containing a looping Sound Queue cannot currently be rebuilt. New music banks may create a looping queue during the initial build.
  • BankBuilder.exe remains required because it performs the final Ogg Vorbis compression used by LE1.
  • Final ISBs must remain just under 2 GiB because LE1 uses signed 32-bit file offsets. Reaching this limit would be an achievement, although perhaps not one worth putting on a CV.
  • WAV input must be mono or stereo, and filenames cannot contain spaces.
  • Only WAVs directly inside the selected source folder are included; nested folders are ignored.
  • Every copy of the matching BioStreamingData must be refreshed whenever its ISB changes.