Audio design
Game audio is a mixing graph plus a music system. Route every sound through a
small set of buses so you can balance and process groups; make music react to
play through layering and re-sequencing rather than looping one track. This skill
teaches the portable practice; bind it to godot-audio, Unity's AudioMixer, or
middleware (FMOD/Wwise) for concrete APIs.
When to use
- Use to design a bus/mixer layout, set group volumes, and apply effects (reverb, compression, EQ) to groups of sounds.
- Use to duck music/ambience under dialogue or impacts (sidechain).
- Use to build adaptive music that responds to combat/exploration intensity.
- Use to add SFX variation (pitch/sample randomization) and sync events to a beat.
When not to use: for the engine's concrete audio nodes/streams, use
godot-audio or the engine's audio skill. Loading/streaming and asset import are
engine concerns. For UI sliders that drive bus volume, see the engine UI skill.
Core workflow
- Lay out buses, not per-sound volume. A typical tree:
Master ← {Music, SFX, Ambience, UI, Voice}. Everything plays into a bus; the player's settings sliders map to bus volumes. Never set hundreds of clip volumes by hand. - Work in decibels, not linear. Perceived loudness is logarithmic. Volume controls and automation should operate in dB; convert only at the edges.
- Leave headroom. Mix so the Master peaks below 0 dBFS (aim for a target loudness, e.g. around -14 to -16 LUFS for many games) to avoid clipping.
- Duck competing sources with a sidechain compressor (or volume automation): when voice/important SFX plays, the music bus dips, then recovers.
- Make music adaptive via vertical layering (stems faded in/out) and/or horizontal re-sequencing (swap segments at musical boundaries). See the reference.
- Vary repeated SFX with small random pitch/volume offsets and sample pools so footsteps and hits don't sound robotic.
- Verify on real output. Listen on headphones and speakers; check that the mix balances, ducking is audible but not pumping, and music transitions land on the beat — never assume from the editor meters alone.
Patterns
1. Bus routing and dB gain
2. Ducking via sidechain (music dips under voice)
3. SFX variation (kill the "machine gun" repeat)
4. Beat-synced events (quantize to the music grid)
Pitfalls
- Treating slider values as dB. Volume is logarithmic; map
0..1throughlinear_to_db(and back withdb_to_linear). A linear slider on raw amplitude feels like it does nothing until the very bottom. - Per-clip volume instead of buses makes a global balance pass impossible and bloats save/settings. Mix on buses.
- Clipping the master. Summed sounds exceed 0 dBFS and distort. Leave headroom; put a limiter on Master as a safety net, not as the mixer.
- Pumping ducking: too-fast release or too-high ratio makes music audibly breathe. Lengthen release; lower ratio.
- Looping a single music track for the whole game feels flat. Use layers or segments that respond to state (see the reference).
- Beat sync off frame time.
deltadrifts; read the audio playback position for musical timing, and account for output latency. - Unbounded one-shot players: spawning AudioStreamPlayers without freeing
them leaks. Free on
finished, or use a small pool.
References
references/adaptive-music.md— vertical layering vs horizontal re-sequencing, transition timing (bars/quantize), stingers, intensity mapping, and crossfades.
Related skills
godot-audio— buses,AudioStreamPlayer, effects, and sync-to-beat in Godot.input-systems— trigger audio from input actions.physics-tuning— collision events that drive impact SFX.platformer,roguelike— genres whose feel leans on audio feedback.

