Use this skill when designing or implementing audio systems for games - sound effects, adaptive music, spatial/3D audio, and middleware integration with FMOD or Wwise. Triggers on sound design, audio implementation, adaptive music systems, spatial audio, HRTF, audio middleware setup, sound event architecture, audio mixing, dynamic soundscapes, and game audio optimization. Covers FMOD Studio, Audiokinetic Wwise, and engine-native audio APIs.
Use this skill when designing or implementing audio systems for games - sound effects, adaptive music, spatial/3D audio, and middleware integration with FMOD or Wwise. Triggers on sound design, audio implementation, adaptive music systems, spatial audio, HRTF, audio middleware setup, sound event architecture, audio mixing, dynamic soundscapes, and game audio optimization. Covers FMOD Studio, Audiokinetic Wwise, and engine-native audio APIs.
When this skill is activated, always start your first response with the 🧢 emoji.
Game Audio
Game audio encompasses every sound a player hears - from UI clicks to orchestral
scores that shift with gameplay. Unlike film audio, game audio is non-linear and
reactive: sounds must respond to player actions, environmental state, and game
events in real time. This skill covers sound design fundamentals, adaptive music
composition and implementation, spatial (3D) audio systems, and professional
middleware tools (FMOD Studio and Audiokinetic Wwise) that power audio in most
shipped titles.
When to use this skill
Trigger this skill when the user:
Needs to design or implement a sound effects system for a game
Wants to create adaptive or dynamic music that responds to gameplay
Is setting up spatial/3D audio with HRTF or attenuation curves
Needs to integrate FMOD Studio or Wwise into a game engine
Wants to architect a sound event system or audio manager
Asks about audio mixing, buses, ducking, or signal routing
Needs to optimize audio for memory, CPU, or streaming performance
Wants to build dynamic soundscapes or ambient audio layers
Do NOT trigger this skill for:
Music composition theory or notation (use a music theory skill)
Non-game audio production like podcast editing or mastering (use audio-production)
Key principles
Audio is reactive, not scripted - Game audio cannot be authored linearly like
film. Every sound must be designed as a response to an event. Think in terms of
event-to-sound mappings, not timelines.
Less is more in the mix - Players process audio subconsciously. A clean mix
with 4-6 prominent sounds is more impactful than 20 competing layers. Use priority
systems, ducking, and voice limits to keep the mix focused.
Variation prevents fatigue - Any sound heard more than twice needs randomization.
Use round-robin containers, pitch/volume randomization, and multiple samples to
prevent repetition fatigue.
Spatial audio sells immersion - Proper 3D spatialization, distance attenuation,
and environmental effects (reverb zones, occlusion) make players feel present in
the world without them consciously noticing.
Middleware is your friend - FMOD and Wwise exist so audio designers and
programmers can work in parallel. Sound designers author in the middleware tool;
programmers fire events from code. This separation is non-negotiable on any
team larger than one person.
Core concepts
The event-driven audio model
Game audio is built on an event system. Game code fires named events (e.g.,
Player/Footstep, Weapon/Fire, Music/EnterCombat), and the audio middleware
resolves those events into actual sounds. This decoupling means:
Sound designers can swap, layer, or randomize sounds without code changes
Programmers don't need to know which .wav file plays for a footstep
Events can carry parameters (surface type, velocity, health percentage) that
the middleware uses to select or modulate sounds
Adaptive music architecture
Adaptive music uses one or more of these techniques to respond to gameplay:
Technique
Description
Best for
Horizontal re-sequencing
Rearranges musical sections in real time
Exploration, open-world
Vertical layering
Adds/removes instrument layers based on intensity
Combat escalation
Stinger/transition
Plays a short musical phrase to bridge states
State changes (win, lose, discovery)
Branching
Pre-authored alternate paths at decision points
Story-driven moments
Most shipped games combine 2-3 of these. Vertical layering + stingers is the most
common pattern for action games.
Spatial audio pipeline
The spatial audio pipeline processes each sound source through:
Distance attenuation - Volume decreases with distance (linear, logarithmic,
or custom curve)
Spatialization - Panning across speakers/headphones using HRTF (head-related
transfer function) or simple panning
Occlusion/obstruction - Raycast from listener to source; muffle if geometry
blocks the path
Environmental effects - Apply reverb, echo, or filtering based on the
room/space the sound is in (reverb zones)
FMOD vs Wwise at a glance
Aspect
FMOD Studio
Wwise
Pricing
Free under $200K revenue
Free under 1000 sound assets
Learning curve
Lower - familiar DAW-like UI
Steeper - more powerful, more complex
Strength
Rapid prototyping, indie-friendly
Large-scale projects, AAA pipelines
Unity integration
First-class plugin
First-class plugin
Unreal integration
Community plugin
Built-in integration
Scripting
C/C++ API, C# wrapper
C/C++ API, Wwise Authoring API
See references/fmod-guide.md and references/wwise-guide.md for setup and API
details.
Common tasks
Set up an audio event system
Create a centralized audio manager that maps game events to middleware calls.
Layer instrument stems that activate based on a game parameter (e.g., threat level).
FMOD Studio setup:
1. Create a Music Event with multiple audio tracks (stems):
- Track 1: Ambient pad (always playing)
- Track 2: Percussion (activates at threat > 0.3)
- Track 3: Brass/strings (activates at threat > 0.6)
- Track 4: Full orchestra (activates at threat > 0.9)
2. Create a parameter "ThreatLevel" (0.0 to 1.0) on the event
3. Add volume automation on each track tied to ThreatLevel:
- Track 1: Volume 1.0 across full range
- Track 2: Fade in from 0.0 to 1.0 between threat 0.3-0.4
- Track 3: Fade in between 0.6-0.7
- Track 4: Fade in between 0.9-1.0
// Code side - update the parameter from game stateprivate FMOD.Studio.EventInstance musicInstance;
voidStartMusic()
{
musicInstance = AudioManager.Instance.CreateInstance("event:/Music/Exploration");
musicInstance.start();
}
voidUpdate()
{
float threat = CalculateThreatLevel();
musicInstance.setParameterByName("ThreatLevel", threat);
}
Configure spatial audio with attenuation and occlusion
// FMOD: Set 3D attributes on a looping sound sourcepublicclassAudioEmitter : MonoBehaviour
{
[SerializeField] privatestring eventPath = "event:/SFX/Generator_Hum";
private FMOD.Studio.EventInstance instance;
voidStart()
{
instance = FMODUnity.RuntimeManager.CreateInstance(eventPath);
instance.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(transform));
instance.start();
}
voidUpdate()
{
instance.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(transform));
}
voidOnDestroy()
{
instance.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
instance.release();
}
}
For occlusion, raycast from the listener to the source and set a low-pass filter
parameter based on hit count:
Prevent repetition fatigue by using containers and randomization:
FMOD Studio:
1. Create a Multi Instrument inside your event
2. Add 3-5 sound variants (e.g., footstep_01.wav through footstep_05.wav)
3. Set playlist mode to "Shuffle" (avoids consecutive repeats)
4. Add pitch randomization: -2 to +2 semitones
5. Add volume randomization: -1 to +1 dB
Wwise equivalent:
1. Create a Random Container
2. Add sound variants as children
3. Enable "Avoid Repeating Last" with a value of 2-3
4. Add Randomizer on Pitch (-200 to +200 cents) and Volume (-1 to +1 dB)
Set up audio buses and mixing
Organize all game audio into a bus hierarchy for clean mixing:
Master Bus
|- Music Bus (baseline: -6 dB)
| |- Combat Music
| |- Ambient Music
|- SFX Bus (baseline: 0 dB)
| |- Player SFX
| |- Enemy SFX
| |- Environment SFX
|- UI Bus (baseline: -3 dB)
|- Voice Bus (baseline: +2 dB, duck Music by -12 dB when active)
Key mixing practices:
Duck music when dialogue plays (sidechain the Voice bus to Music bus)
Set voice limits per event (e.g., max 8 simultaneous footsteps)
Use snapshot/state systems for context switches (underwater, pause menu)
Keep headroom: master should peak at -3 to -6 dBFS
Optimize audio for performance
Technique
Memory savings
CPU savings
When to use
Compressed formats (Vorbis/Opus)
80-90%
Slight CPU cost
All SFX except very short sounds
Streaming from disk
~100% per sound
Disk I/O cost
Music, long ambiences (>5 seconds)
Voice limiting
Proportional
Proportional
Any sound that can overlap heavily
Sample rate reduction (22kHz)
50%
Minor
Ambient, background, low-frequency
Sound pooling
Avoids alloc spikes
Avoids alloc spikes
Rapid-fire sounds (bullets, particles)
Rules of thumb:
Stream music and long ambiences; load short SFX into memory
Set voice limits: 4-8 for common SFX, 1-2 for music events
Use compressed in-memory format for SFX banks
Budget: aim for under 50 MB total audio memory on console, 100 MB on PC
Anti-patterns / common mistakes
Mistake
Why it's wrong
What to do instead
Hardcoding audio file paths in game code
Tightly couples code to specific assets; impossible to iterate on sounds without recompiling
Use event-based middleware; reference events by name, never by file
No sound variation
Players notice repeated identical sounds within 3 occurrences; breaks immersion
Use random containers with 3-5 variants plus pitch/volume randomization
Music cuts abruptly on state change
Jarring transitions destroy mood; players notice bad music transitions immediately
Use transition timelines, crossfades, or stinger/bridge segments
Ignoring voice limits
100 simultaneous explosion sounds will clip, distort, and destroy CPU budgets
Set per-event voice limits with steal behavior (oldest, quietest, or farthest)
Flat 3D audio (no occlusion)
Sound passing through walls breaks spatial awareness and immersion
Implement raycast-based occlusion with low-pass filtering
Mixing everything at 0 dB
No headroom causes clipping; no hierarchy means players can't prioritize important sounds
Structure buses with headroom; duck less important buses when critical sounds play
Loading all audio into memory
Game runs out of memory or has huge load times
Stream long audio; compress short SFX; only load banks needed for current level
Gotchas
FMOD/Wwise events not releasing cause memory leaks - Creating an EventInstance and calling start() without calling stop() and release() on OnDestroy leaks audio resources permanently. Looping sounds in particular will play forever even after the game object is destroyed. Always pair CreateInstance() with a release() in the cleanup path.
Voice stealing can silence the most important sound - If your voice limit steal mode is set to "oldest" or "lowest priority" and you don't assign proper priority weights, the enemy warning sound or boss music can get stolen by ambient birds. Set explicit priority values for every event category and use "lowest priority" steal on non-critical sounds only.
Streaming audio from disk introduces frame spikes on seek - Streaming is memory-efficient but seeks cause disk I/O spikes. Enabling streaming on short SFX (under 5 seconds) trades memory savings for CPU/IO cost with no benefit. Stream only music and long ambiences; load short SFX into memory compressed.
Occlusion raycasts every frame on all emitters tanks CPU - Running Physics.Raycast per emitter per frame for 50+ active audio sources will consume significant CPU time. Stagger occlusion updates (every 3-5 frames per emitter, not every frame) and use a maximum occlusion check distance to skip distant emitters.
Parameter automation curves that are too fast cause audible clicks - Changing a parameter value instantly (e.g., switching ThreatLevel from 0 to 1 in one frame) causes a discontinuity in the audio signal that produces an audible click. Always use smoothed parameter changes with a minimum ramp time of 50-100ms for volume/frequency parameters.
References
For detailed content on specific topics, read the relevant file from references/:
Only load a references file if the current task requires deep detail on that topic.
Companion check
On first activation of this skill in a conversation: check which companion skills are installed by running ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null. Compare the results against the recommended_skills field in this file's frontmatter. For any that are missing, mention them once and offer to install: