ue5-wwise-setup
Wwise Setup — WAAPI HTTP Automation
Set up complete Wwise projects programmatically: bus hierarchies, RTPCs, switches, events, SoundBanks, and AudioLink routing.
WAAPI HTTP API (Port 8090)
All calls use curl -s -X POST http://127.0.0.1:8090/waapi with JSON body:
{
"uri": "ak.wwise.core.object.create",
"args": { ... },
"options": {}
}
Key format rules:
argscontains the call parametersoptionsis top-level (NOT inside args), used forreturnfieldsreturngoes inoptions, NOT inargs- Always include
"options": {}even if empty - Object paths use backslashes:
\\Busses\\Default Work Unit\\Main Audio Bus
Return Fields
{
"uri": "ak.wwise.core.object.get",
"args": { "from": {"id": ["{GUID}"]} },
"options": { "return": ["id", "name", "type", "path"] }
}
Core WAAPI Operations
Create Object
curl -s -X POST http://127.0.0.1:8090/waapi -H "Content-Type: application/json" -d '{
"uri": "ak.wwise.core.object.create",
"args": {
"parent": "\\Busses\\Default Work Unit\\Main Audio Bus",
"type": "Bus",
"name": "SFX",
"onNameConflict": "merge"
},
"options": {}
}'
Set Property
curl -s -X POST http://127.0.0.1:8090/waapi -d '{
"uri": "ak.wwise.core.object.setProperty",
"args": {"object": "{GUID}", "property": "Volume", "value": -6.0},
"options": {}
}'
Set Reference (e.g. OutputBus)
curl -s -X POST http://127.0.0.1:8090/waapi -d '{
"uri": "ak.wwise.core.object.setReference",
"args": {"object": "{GUID}", "reference": "OutputBus", "value": "{BUS_GUID}"},
"options": {}
}'
Delete Object
curl -s -X POST http://127.0.0.1:8090/waapi -d '{
"uri": "ak.wwise.core.object.delete",
"args": {"object": "{GUID}"},
"options": {}
}'
Search / Query
# By ID
"from": {"id": ["{GUID}"]}
# By type
"from": {"ofType": ["Event"]}
# Text search
"from": {"search": ["AudioLink"]}
# By path
"from": {"path": ["\\Events\\Default Work Unit"]}
# Children of object
"transform": [{"select": ["children"]}]
Save Project
curl -s -X POST http://127.0.0.1:8090/waapi -d '{
"uri": "ak.wwise.core.project.save", "args": {}, "options": {}
}'
Bus Hierarchy Setup
Standard game audio bus hierarchy (template):
Main Audio Bus
├── SFX
│ ├── Player
│ │ ├── Footsteps
│ │ └── Foley
│ ├── Weapons
│ │ ├── Weapons_Rifle
│ │ ├── Weapons_Shotgun
│ │ └── Weapons_Pistol
│ ├── Impacts
│ └── Meta_Footsteps
├── NPC
│ ├── NPC_Footsteps
│ ├── NPC_Vocals
│ └── NPC_Actions
├── Ambient
│ ├── General_SoundBed
│ ├── Location_A
│ └── Location_B
├── Music
├── VO
└── AudioLink
├── AudioLink_Footsteps
├── AudioLink_Weapons
└── AudioLink_Ambient
AuxBusses (reverb sends — 3 room types):
- Reverb_Small — tight room, short tail (0.4-0.8s RT60), hut/closet
- Reverb_Medium — standard room, mid tail (1.0-1.8s RT60), house/cave
- Reverb_Large — hall/cathedral, long tail (2.5-5.0s RT60), temple/warehouse
Python automation pattern:
import subprocess, json
def waapi(uri, args):
payload = json.dumps({"uri": uri, "args": args, "options": {}})
r = subprocess.run(["curl", "-s", "-X", "POST", "http://127.0.0.1:8090/waapi",
"-H", "Content-Type: application/json", "-d", payload],
capture_output=True, text=True)
return json.loads(r.stdout)
# Create bus under Main Audio Bus
result = waapi("ak.wwise.core.object.create", {
"parent": "\\Busses\\Default Work Unit\\Main Audio Bus",
"type": "Bus", "name": "SFX", "onNameConflict": "merge"
})
bus_id = result["id"]
RTPC (Game Parameters)
Create Game Parameter
waapi("ak.wwise.core.object.create", {
"parent": "\\Game Parameters\\Default Work Unit",
"type": "GameParameter", "name": "Distance",
"onNameConflict": "merge"
})
Key game parameters:
- Distance — Player-to-source distance
- FootstepIntensity — Movement speed
- CombatIntensity — Combat state
- PlayerHealth — Health percentage
- Surface — Surface type (0-1)
- WeaponFireRate — Firing rate
- MusicVolume — Music mix level
- ReverbSend — Reverb wet amount
Switches & States
Switch Group
# Create switch group
waapi("ak.wwise.core.object.create", {
"parent": "\\Switches\\Default Work Unit",
"type": "SwitchGroup", "name": "Surface",
"onNameConflict": "merge"
})
# Create switch values
for surface in ["Concrete", "Glass", "Metal", "Wood", "Dirt"]:
waapi("ak.wwise.core.object.create", {
"parent": "\\Switches\\Default Work Unit\\Surface",
"type": "Switch", "name": surface,
"onNameConflict": "merge"
})
State Group
waapi("ak.wwise.core.object.create", {
"parent": "\\States\\Default Work Unit",
"type": "StateGroup", "name": "Music_State",
"onNameConflict": "merge"
})
for state in ["Music_On", "Music_Off"]:
waapi("ak.wwise.core.object.create", {
"parent": "\\States\\Default Work Unit\\Music_State",
"type": "State", "name": state,
"onNameConflict": "merge"
})
Events
Create Event with Play Action
# Create event
event = waapi("ak.wwise.core.object.create", {
"parent": "\\Events\\Default Work Unit",
"type": "Event", "name": "Play_Footstep",
"onNameConflict": "merge"
})
# Add Play action (ActionType 1 = Play)
action = waapi("ak.wwise.core.object.create", {
"parent": event["id"], "type": "Action",
"name": "Play", "@ActionType": 1,
"onNameConflict": "merge"
})
# Set target sound
waapi("ak.wwise.core.object.setReference", {
"object": action["id"], "reference": "Target",
"value": "{SOUND_GUID}"
})
ActionType values: 1=Play, 2=Stop, 3=Pause, 4=Resume, 7=SetSwitch, 8=SetState
SoundBanks
Create SoundBank
waapi("ak.wwise.core.object.create", {
"parent": "\\SoundBanks\\Default Work Unit",
"type": "SoundBank", "name": "LyraDemo",
"onNameConflict": "merge"
})
Set Inclusions
waapi("ak.wwise.core.soundbank.setInclusions", {
"soundbank": "{BANK_GUID}",
"operation": "add",
"inclusions": [
{"object": "{EVENT_GUID}", "filter": ["events", "structures", "media"]}
]
})
Generate SoundBanks
waapi("ak.wwise.core.soundbank.generate", {
"soundbanks": [{"name": "LyraDemo"}],
"platforms": ["Mac"],
"languages": ["SFX"],
"clearAudioFileCache": True, # IMPORTANT: forces reconversion
"writeToDisk": True
})
Critical: Use clearAudioFileCache: true when banks are empty/stale.
Stage Banks for UE5
Copy from GeneratedSoundBanks to Content/WwiseAudio:
cp GeneratedSoundBanks/Mac/*.bnk Content/WwiseAudio/Mac/
cp GeneratedSoundBanks/Mac/*.json Content/WwiseAudio/Mac/
AudioLink Setup
AudioLink routes MetaSounds audio → Wwise for mixing/spatialization.
Architecture
MetaSounds Source → AudioLink Component → Wwise Event → Audio Input Sound → Wwise Bus
Wwise Side (4 steps)
- Create AudioLink buses under Main Audio Bus
- Create ActorMixer "AudioLink_Sources" via WAAPI
- Create Sound SFX objects under ActorMixer (one per channel)
- Set Audio Input plugin on each Sound (MANUAL in Wwise UI — WAAPI cannot create SourcePlugin)
# Create ActorMixer
am = waapi("ak.wwise.core.object.create", {
"parent": "\\Containers\\Default Work Unit",
"type": "ActorMixer", "name": "AudioLink_Sources",
"onNameConflict": "merge"
})
# Route to AudioLink bus
waapi("ak.wwise.core.object.setReference", {
"object": am["id"], "reference": "OutputBus",
"value": "{AUDIOLINK_BUS_GUID}"
})
# Create Sound children
for name in ["AudioLink_Footsteps", "AudioLink_Weapons", "AudioLink_Ambient", "AudioLink_General"]:
waapi("ak.wwise.core.object.create", {
"parent": am["id"], "type": "Sound",
"name": name, "onNameConflict": "merge"
})
MANUAL STEP: In Wwise UI, right-click each Sound → set source to "Wwise Audio Input" plugin.
UE5 Side (4 steps)
Step 1: Create WwiseAudioLinkSettings Data Assets
In UE5 Content Browser: Right-click → Miscellaneous → Data Asset → select WwiseAudioLinkSettings
Create one per channel:
| Asset Name | StartEvent |
|---|---|
AL_Settings_Footsteps |
Play_AudioLink_Footsteps |
AL_Settings_Weapons |
Play_AudioLink_Weapons |
AL_Settings_Ambient |
Play_AudioLink_Ambient |
AL_Settings_General |
Play_AudioLink_General |
Set the StartEvent property to the matching Wwise AkAudioEvent asset.
Note: Wwise UE integration auto-generates AkAudioEvent assets from SoundBank metadata.
Step 2: Add WwiseAudioLinkComponent to Actor Blueprint
1. Open Actor BP (e.g. BP_Creature, BP_AmbientSource)
2. Add Component → search "Wwise Audio Link"
3. In Details panel set:
- Sound: Your MetaSounds Source asset (e.g. MS_LyraFootstep_Layered)
- Settings: The matching WwiseAudioLinkSettings asset (e.g. AL_Settings_Footsteps)
- Auto Play: true (starts on BeginPlay)
Step 3: Verify Audio Flow
MetaSounds Source (synthesis)
→ WwiseAudioLinkComponent (bridge)
→ Wwise Play Event (triggers Audio Input)
→ Audio Input Sound (receives audio)
→ Wwise Bus (mixing/spatialization)
Step 4: Test In-Editor
- Play in Editor (PIE)
- Open Wwise Profiler → verify audio appears on AudioLink buses
- Check levels in Wwise Mixing Desk
Key Classes
UWwiseAudioLinkSettings—StartEvent(TSoftObjectPtr)UWwiseAudioLinkComponent—Sound(USoundBase),Settings(UWwiseAudioLinkSettings*),bAutoPlayUAkAudioEvent— Auto-generated from Wwise SoundBank, found in Content/WwiseAudio/
AudioLink via TCP Plugin (Partial)
Our TCP plugin can add components to BPs but cannot create data assets yet:
# Add WwiseAudioLinkComponent to a Blueprint (via bp_add_node)
# Set component properties (via bp_set_pin_default)
# Wire to BeginPlay (via bp_connect_pins)
# Compile (via bp_compile)
Missing: create_data_asset command for WwiseAudioLinkSettings — requires new C++ command.
Containers Setup
SwitchContainer (Footsteps by surface)
sc = waapi("ak.wwise.core.object.create", {
"parent": "\\Actor-Mixer Hierarchy\\Default Work Unit\\Player_Audio",
"type": "SwitchContainer", "name": "Footsteps",
"onNameConflict": "merge"
})
# Set switch group reference
waapi("ak.wwise.core.object.setReference", {
"object": sc["id"], "reference": "SwitchGroupOrStateGroup",
"value": "{SURFACE_SWITCH_GROUP_GUID}"
})
# Add RandomSequenceContainers per surface
for surface in ["Concrete", "Glass", "Metal", "Dirt"]:
waapi("ak.wwise.core.object.create", {
"parent": sc["id"], "type": "RandomSequenceContainer",
"name": f"Footstep_{surface}", "onNameConflict": "merge"
})
Import Audio Files
waapi("ak.wwise.core.audio.import_", {
"importOperation": "useExisting",
"imports": [{
"audioFile": "/path/to/Footstep_01.wav",
"objectPath": "\\Containers\\Default Work Unit\\Player_Audio\\Footsteps\\Footstep_Concrete\\<Sound>Footstep_01"
}]
})
Transport / Playback Testing
# Play in Wwise transport (NOT ak.soundengine.postEvent)
curl -s -X POST http://127.0.0.1:8090/waapi -d '{
"uri": "ak.wwise.ui.commands.execute",
"args": {"command": "TransportPlayDirectly", "objects": ["{EVENT_GUID}"]},
"options": {}
}'
Reload / Recovery
# Force reload project from disk
"command": "ForceReloadProject"
# Save project
"uri": "ak.wwise.core.project.save"
Critical Gotchas
- WAAPI cannot create SourcePlugin — Audio Input must be set manually in Wwise UI
- Never edit .wwu XML files — not with Python ET, not with string replacement. Use WAAPI only
- Delete macOS
._*.wwufiles on external drives — Wwise tries to parse them as work units clearAudioFileCache: truerequired when SoundBanks are empty/staleonNameConflict: "merge"prevents duplicate creation errors- Paths use backslashes even on macOS:
\\Busses\\Default Work Unit\\... options: {}required in every WAAPI HTTP call (even empty)- SoundBank "Init" is auto-generated — don't include in generate call
returngoes inoptionsat top level, NOT inargs- ForceReloadProject may show dialog — user must click through
- SoundBank stale GUIDs — if events were deleted+recreated, old GUIDs persist in SoundBank inclusions. Fix: delete entire SoundBank, recreate, re-add inclusions fresh
- WAAPI
setInclusionswith "replace" does NOT always update on-disk .wwu file — Wwise caches its own version - Audio Input source name doesn't matter — just select "Wwise Audio Input" plugin, naming is irrelevant
Lyra Demo Bus IDs (Reference)
| Bus | GUID |
|---|---|
| Main Audio Bus | {1514A4D8-1DA6-412A-A17E-75CA0C2149F3} |
| SFX | {E846F1FB-12DF-4C31-869B-4458F7EC3E34} |
| Footsteps | {8C4CDC41-5441-4315-BC4E-B481E49A5A50} |
| Weapons | {A05FFC03-3991-44E9-9C31-50FFCD922457} |
| Impacts | {BED62D6D-E566-48C4-B5A7-46AE8567B08E} |
| Ambient | {5C0C54F6-F005-4282-A866-83D55DB77B40} |
| Music | {09AF1FE3-329E-49ED-936B-262BE76D3906} |
| VO | {C0071867-68AF-4982-AFB0-2A9AB69FA3D0} |
| AudioLink | {1A33D85D-C61B-49B2-8F67-9BCF7412FEBD} |
| AudioLink_Footsteps | {9D85A7F6-6F92-4E21-AF02-5558FE66ED07} |
| AudioLink_Weapons | {1FFF2706-690A-4800-B4ED-170B3F3CD8F8} |
Lyra Demo AudioLink IDs (Reference)
| Object | Type | GUID |
|---|---|---|
| AudioLink_Sources | ActorMixer | {AFEA4AEC-0011-495F-8DF5-410C88FEFCC0} |
| AudioLink_Footsteps | Sound | {B39B9305-C24A-4BCD-9C80-E971503DEBFB} |
| AudioLink_Weapons | Sound | {188E955C-321A-482D-938E-54C841953608} |
| AudioLink_Ambient | Sound | {81F2FF30-3D4B-432C-B19D-846704FE8F1B} |
| AudioLink_General | Sound | {1A895170-85E6-4C52-972A-2B0ECA597ABC} |
| Play_AudioLink_Footsteps | Event | {A1AF956E-158B-431D-8B98-5ACC37165F9C} |
| Play_AudioLink_Weapons | Event | {CE1F96EF-AF11-4EA5-B03F-01DB73B513EC} |
| Play_AudioLink_Ambient | Event | {472B1B7D-921A-4E99-A521-809E9596AE8F} |
| Play_AudioLink_General | Event | {516872EF-0B23-4A0C-AAE2-6804E641B2AA} |
| LyraDemo | SoundBank | {78D6CFDE-B75B-496D-9D5C-8C55C969A63C} |
Full Build Recipe — What The Agent Does
This is the exact sequence to build a complete Wwise project from scratch via WAAPI. Tested on Wwise 2025.1.5, UE 5.7.2, macOS.
Phase 1: Bus Hierarchy
1. Create Main Audio Bus children: SFX, NPC, Ambient, Music, VO, AudioLink
2. Create SFX/Player sub-buses: Footsteps, Foley
3. Create SFX/Weapons sub-buses: Weapons_Rifle, Weapons_Shotgun, Weapons_Pistol
4. Create SFX sub-buses: Impacts, Meta_Footsteps
5. Create NPC sub-buses: NPC_Footsteps, NPC_Vocals, NPC_Actions
6. Create Ambient sub-buses: General_SoundBed, Location_A, Location_B
7. Create AudioLink sub-buses: AudioLink_Footsteps, AudioLink_Weapons, AudioLink_Ambient
8. Create AuxBusses: Reverb_Small, Reverb_Medium, Reverb_Large
All via ak.wwise.core.object.create with type: "Bus" or type: "AuxBus".
Phase 2: Game Parameters (RTPCs)
Parent: \\Game Parameters\\Default Work Unit
Type: GameParameter
Names: Distance, FootstepIntensity, CombatIntensity, PlayerHealth, Surface, WeaponFireRate, MusicVolume, ReverbSend
Phase 3: Switches & States
Switch Groups:
Surface → Concrete, Glass, Metal, Wood, Dirt, Grass
Location → Exterior, Interior_Small, Interior_Medium, Interior_Large
Weapon → Rifle, Shotgun, Pistol
State Groups:
Music_State → Music_On, Music_Off
Combat_State → Combat_Active, Combat_Idle
Note: Surface switching is handled by SwitchContainer inside Footsteps — no separate bus per surface needed.
Phase 4: Actor-Mixer Hierarchy (Sound Containers)
\\Actor-Mixer Hierarchy\\Default Work Unit\\
├── Player_Audio
│ ├── Footsteps (SwitchContainer → Surface switch group)
│ │ ├── Footstep_Concrete (RandomSequenceContainer)
│ │ ├── Footstep_Glass (RandomSequenceContainer)
│ │ ├── Footstep_Metal (RandomSequenceContainer)
│ │ └── Footstep_Dirt (RandomSequenceContainer)
│ ├── Weapons_Rifle (SwitchContainer or RandomSequence)
│ ├── Weapons_Shotgun (SwitchContainer or RandomSequence)
│ ├── Weapons_Pistol (SwitchContainer or RandomSequence)
│ └── Player_Foley (RandomSequenceContainer)
├── NPC_Audio
│ ├── NPC_Footsteps (SwitchContainer → Surface switch group)
│ ├── NPC_Vocals (RandomSequenceContainer)
│ └── NPC_Actions (RandomSequenceContainer)
├── Environment_Audio
│ ├── Ambience_General (BlendContainer, looping)
│ ├── Ambience_Location_A (Sound, looping)
│ └── Ambience_Location_B (Sound, looping)
├── UI_Audio
└── AudioLink_Sources (ActorMixer)
├── AudioLink_Footsteps (Sound + Audio Input plugin)
├── AudioLink_Weapons (Sound + Audio Input plugin)
├── AudioLink_Ambient (Sound + Audio Input plugin)
└── AudioLink_General (Sound + Audio Input plugin)
Routing: Each container → its matching bus via setReference → OutputBus.
- Footsteps → SFX/Player/Footsteps bus
- Weapons_Rifle → SFX/Weapons/Weapons_Rifle bus
- NPC_Footsteps → NPC/NPC_Footsteps bus
- Ambience_Location_A → Ambient/Location_A bus
Phase 5: Import Audio Files
waapi("ak.wwise.core.audio.import_", {
"importOperation": "useExisting",
"imports": [{"audioFile": "/path/to.wav", "objectPath": "\\...\\<Sound>Name"}]
})
Set looping on ambient: setProperty → IsLoopingEnabled → true
Phase 6: Events
Create Play/Stop pairs for each sound:
Player:
Play_Footstep / Stop_Footstep → Footsteps SwitchContainer
Play_Weapon_Rifle / Stop_Weapon_Rifle → Weapons_Rifle
Play_Weapon_Shotgun / Stop_Weapon_Shotgun → Weapons_Shotgun
Play_Weapon_Pistol / Stop_Weapon_Pistol → Weapons_Pistol
NPC:
Play_NPC_Footstep / Stop_NPC_Footstep → NPC_Footsteps
Play_NPC_Vocal → NPC_Vocals
Play_NPC_Action → NPC_Actions
Environment:
Play_Ambience_General / Stop_Ambience_General → Ambience_General
Play_Ambience_Location_A / Stop_Ambience_Location_A → Ambience_Location_A
Play_Ambience_Location_B / Stop_Ambience_Location_B → Ambience_Location_B
Other:
Play_Music / Stop_Music → Music container
Play_AudioLink_Footsteps/Weapons/Ambient/General → AudioLink sounds
ActionType: 1=Play for Play events, 2=Stop for Stop events.
Wire each action's Target reference to the sound container.
Phase 7: SoundBank
1. Create SoundBank "LyraDemo"
2. setInclusions: add ALL events with filter ["events", "structures", "media"]
3. Generate: platforms=["Mac"], writeToDisk=true, clearAudioFileCache=true
Phase 8: Save
ak.wwise.core.project.save
UE5 Wwise Integration Setup
Step 1: Enable Wwise Plugin in .uproject
Add to the Plugins array in YourProject.uproject:
{"Name": "Wwise", "Enabled": true},
{"Name": "WwiseSoundEngine", "Enabled": true}
Both plugins must be present on disk at Plugins/Wwise/ and Plugins/WwiseSoundEngine/.
Step 2: Config — DefaultGame.ini
Wwise writes its settings to [/Script/AkAudio.AkSettings] in DefaultGame.ini.
Key fields:
[/Script/AkAudio.AkSettings]
WwiseProjectPath=(FilePath="YourProject_WwiseProject/YourProject_WwiseProject.wproj")
RootOutputPath=(Path="../YourProject_WwiseProject/GeneratedSoundBanks")
WwiseStagingDirectory=(Path="WwiseAudio")
InitBank=/Game/WwiseAudio/InitBank.InitBank
AudioRouting=EnableWwiseOnly
bWwiseSoundEngineEnabled=True
bWwiseAudioLinkEnabled=False
Step 3: Audio Routing Modes
The AudioRouting enum (EAkUnrealAudioRouting) has 5 values:
| Value | Effect |
|---|---|
EnableWwiseOnly |
Only Wwise produces audio. UE native audio silent. |
Separate |
Both Wwise and UE audio play simultaneously. |
AudioLink |
All UE audio routes through AudioLink → Wwise. |
EnableUnrealOnly |
Only UE audio. Wwise SoundEngine disabled. |
Custom |
Developer configures manually. |
For demos without AudioLink: Use EnableUnrealOnly to keep Lyra audio working, show Wwise project separately.
For full integration: Use AudioLink (requires bWwiseAudioLinkEnabled=True).
Step 4: AudioLink Enable Flag
AudioLink is controlled by TWO settings:
AudioRouting=AudioLinkin[/Script/AkAudio.AkSettings]bWwiseAudioLinkEnabled=Truein same section
The runtime module reads from GGameIni:
GConfig->GetBool(TEXT("/Script/AkAudio.AkSettings"),
TEXT("bWwiseAudioLinkEnabled"), bWwiseAudioLinkEnabled, GGameIni);
Step 5: Root Output Path
The GeneratedSoundBanks path must be set in two places:
- DefaultGame.ini:
RootOutputPath=(Path="../YourProject_WwiseProject/GeneratedSoundBanks") - Per-user settings (Saved/Config/MacEditor/EditorPerProjectUserSettings.ini):
RootOutputPathOverride=(Path="/full/path/to/GeneratedSoundBanks")
If RootOutputPathOverride is empty, UE shows "Root Output Path is empty" warning and banks won't load.
Step 6: Reconcile Wwise Assets
After SoundBanks are generated and paths configured:
- Open Wwise Browser in UE (Window → Wwise Browser)
- Select all Events → Right-click → Reconcile Selection
- This creates
.uassetfiles inContent/WwiseAudio/that UE can reference - Without reconciliation, AkAmbientSound/AkComponent can't find events
Step 7: Verify Initialization
Check Output Log for these lines (in order):
LogAkAudio: OnAudioRoutingUpdate: Wwise SoundEngine Enabled: true
LogAkAudio: Wwise SoundEngine successfully initialized.
LogAkAudio: Initialization complete.
LogAkAudio: Audiokinetic Audio Device initialized.
LogAkAudio: Successfully connected to Wwise Authoring on localhost.
If Audio Device Manager Initialization Failed: Revert any manual DefaultEngine.ini changes. Wwise config belongs in DefaultGame.ini, NOT DefaultEngine.ini.
UE5 Integration Gotchas (Learned the Hard Way)
- Config goes in DefaultGame.ini — Wwise settings are
[/Script/AkAudio.AkSettings]in DefaultGame.ini. Adding[/Script/AkAudio.AkSettings]to DefaultEngine.ini causesAudio Device Manager Initialization Failed - UE overwrites config on save — If you edit DefaultGame.ini while UE is open, UE may overwrite your changes on next save. Edit while UE is closed
- AudioRouting enum is strict — Invalid values (like
EnableWwiseAndAudioLink) causeFEnumProperty invalid valueerror and silently revert to default - AudioLink toggle grayed out — The UI toggle only works if
bWwiseAudioLinkEnabledis set in config. Set it in DefaultGame.ini, not through UI - Wwise plugin NOT auto-discovered — Even with files in
Plugins/Wwise/, must explicitly add to .uproject Plugins array - Wwise replaces UE audio completely — In
EnableWwiseOnlymode, ALL UE native audio (MetaSounds, AudioComponents) goes silent. Lyra has no sound because it doesn't post Wwise events - Content Browser hides plugin content — Maps in GameFeature plugins (like L_ShooterPerf) don't appear unless "Show Plugin Content" is enabled. Use Ctrl+P to search instead
- MetaSounds Presets are read-only —
_Presetsuffix assets inherit from parent Source. Cannot add nodes. Must duplicate the parent Source to edit the graph EnableUnrealOnlyfor demo without AudioLink — Keeps all Lyra audio working while Wwise project exists for separate showcase- Two plugins required —
Wwise(integration) +WwiseSoundEngine(SDK) both needed in .uproject. Missing either = no Wwise
Source Files
- Wwise tools:
src/ue_audio_mcp/tools/wwise_*.py(20 tools) - Wwise types:
src/ue_audio_mcp/knowledge/wwise_types.py - Wwise templates:
src/ue_audio_mcp/templates/wwise/(6 JSON) - WAAPI research:
research/research_waapi_mcp_server.md(87 functions)
$ARGUMENTS
More from koshimazaki/ue-audio-skills
ue5-blueprint-audio
Unreal Engine 5 Blueprint audio specialist. Use when working with Blueprint audio logic, game event detection, parameter wiring, audio components, scanning blueprints for audio nodes, listing project assets, or connecting game state to audio systems via UE5.
20ue5-metasound-dsp
MetaSounds DSP specialist for Unreal Engine 5. Use when designing MetaSounds graphs, choosing DSP nodes, configuring filters/oscillators/envelopes, building signal chains, working with the Builder API, or creating audio templates. Covers 144 nodes across 20 categories.
12ue5-plugin-dev
Add a new C++ TCP command + Python MCP tool to the UE Audio MCP plugin. Guides you through the 6-file checklist so nothing gets missed.
11ue5-audio-mcp
UE5 Audio MCP plugin TCP control. Use when sending commands to the Unreal Editor plugin, building MetaSounds graphs via TCP, scanning blueprints, editing Blueprint graphs, spawning audio actors, or debugging the plugin connection on port 9877.
10ue5-audio-builder
Full pipeline audio system generator. Use when building complete game audio systems that span MetaSounds + Blueprint + Wwise layers, generating AAA project structures, or orchestrating multi-layer audio from a natural language description.
8build-system
Full pipeline audio system generator. Use when building complete game audio systems that span MetaSounds + Blueprint + Wwise layers, generating AAA project structures, or orchestrating multi-layer audio from a natural language description.
2