4.6 KiB
Soundbanks and in-memory sounds
Most short sound effects (footsteps, foley, combat, weapons, objects, UI, grunts) are not in the WADs: they
are WEMs stored inside Wwise soundbanks, either loose in SFX\*.bnk or embedded in the UE3 packages (.upk).
The catalog and the editor only cover the WADs (wad.md), so none of these sounds are listed or editable yet.
Survey of the installed game (buildid 3718300) on 2026-10-09, read-only.
Inventory
| where | banks | unique in-memory WEMs | in the catalog |
|---|---|---|---|
loose SFX\*.bnk (Batman/Catwoman footsteps, 32 surfaces each, + TST_Prep_Media) |
65 | 1,117 | 0 |
banks embedded in .upk packages (in 1,432 of the 2,650 packages) |
3,340 | 15,641 (~276 MB) | 0 |
The two sets share 119 media IDs: about 15,800 unique sounds in total. The WADs, by comparison, are fully covered: the BKPK tables in the packages reference 2,543 WAD entries, all of them in the catalog.
Embedded WEMs by bank name prefix: Speech 7,872, CHR (character foley, combat, bosses) 3,896, PSO 781,
WPN 664, NPC 475, OBJ 439, SEQ 265, GUI 208, PSA 203, MTN 196, PX 195, DVC 100, GEN 80,
PHY 73, AMB 65, SBJ 50, others < 30. The Speech_ banks (e.g. Speech_EMOTE_Batman, ..._GRUNT) are
probably efforts/grunts rather than dialogue (there are no per-language packages); not verified by listening.
All WEMs seen are Vorbis (format tag 0xFFFF), the same codec as the WADs: the footsteps are mono (4 stereo),
the embedded ones mono or stereo (~22 % stereo in a 2,533-WEM sample).
Names
- The community hash list names none of these media IDs; only the bank names are known.
CookedPCConsole\CookedBanks.txtlists all 3,345 cooked bank names. Bank ID = FNV-1 32 of the lowercased name (the same hash Wwise uses for every name). 3,338 of them are embedded in packages, 4 are loose.bnkfiles (Init,Global,Music,Music_PDLC);AMB_OW_A6,AMB_OW_C1,AMB_OW_E1,Speech_EMOTE_Thug_Muffled_StopandSpeech_GFxUI_ArkhamCityStorieswere found nowhere.- Loose footstep banks are named in their STID chunk (
CHR_BatmanFootsteps_Concrete_Media, ...).
Bank layout (version 56, Wwise 2011.1)
Chunks BKHD {u32 version 56, u32 bank id, ...}, DIDX N x {u32 media id, u32 offset, u32 size} (offsets
relative to the DATA payload, WEMs 16-byte aligned), DATA, HIRC, STID {u32 type, u32 count,
count x {u32 bank id, u8 len, name}}. Init (50C63A23.bnk) has STMG/ENVS instead of media.
701C1363.bnk holds only BKHD.
HIRC Sound object (type 2) payload: u32 object id, u32 plugin id (0x00040001 = Vorbis), u32 stream type
(0 = in memory, 1 = streamed, 2 = prefetch), u32 media id, u32 bank id of the media; for in-memory sources
then u32 offset, u32 size, where offset = DATA payload position (from the start of the bank) + DIDX offset
and size = DIDX size (checked on every in-memory source of the footstep banks and of BmGame.upk).
A few sources use media of another bank. Every streamed media ID found is in a BKPK table, i.e. a WAD sound
(wad.md).
Banks inside packages
- The packages are fully LZO-compressed (package version 805, licensee 101). For the survey they were unpacked
with Gildor's
decompress.exe(gildor.org; used from the user's old modding folder, not part of this repository) and searched forBKHD(banks) andBKPK(WAD indexes).UnrealX.upk(512 bytes) is not a readable package (wrong tag, probably encrypted). - Bank blobs in packages: 41,798 for 3,340 bank IDs. Many banks are copied into several packages (e.g.
CHR_CatwomanFoleySuit31 times,CHR_BatmanFoleyBelt26). 302 bank IDs occur as several blobs with different media subsets (often one WEM each, several per package), so a bank's media set is the union of all its blobs. - Largest:
CHR_RobinFoleyCape300 WEMs,CHR_BatmanFoleyCape282,CHR_Clayface263,CHR_NightwingFoley242,CHR_CatwomanFoleySuit225,CHR_MrFreeze176,CHR_Combat166.
Consequences for editing (not implemented)
- Loose banks: a replacement means rebuilding
DATA/DIDXand the in-memory offsets/sizes in the HIRC Sound objects of that bank (and in any other bank whose sources use its media). Whether the game accepts a bank that changed size is untested. - Embedded banks: the package must be rewritten (decompress, patch every blob of the bank, recompress LZO, fix the package's chunk table and export offsets/sizes). A sound must be replaced in every package that carries a copy, otherwise the game may load the original from another package.
- Either way: unverified in game so far; the same WEM rules apply (
wem.md).