On this page

Game audio: sources and how they map to Godot

The research behind the game-audio skill and the audio command, gathered on 2026-10-21. The sources are middleware manuals (FMOD, Wwise, Unreal), Godot 4.7.2's class reference and engine source, and the published loudness recommendations. None of the web pages states a licence, so they are summarised and linked here, not copied.

Sources

Source What it gave
FMOD Studio manual 2.04, "Mixing" Bus hierarchy (events into group buses into master), return buses fed by sends, VCAs as the settings-screen volume controls, snapshots, bus instance limits
FMOD Studio manual 2.04, "FMOD Studio Concepts" and the event macro, instrument and effect references Parameters, logic markers and quantised transitions; multi and scatterer instruments; max instances, stealing (oldest, furthest, quietest, virtualise, none), cooldown and five priority levels; compressor and sidechain
FMOD Engine, "Managing resources in the Core API" Virtual voices: a far or quiet voice keeps time silently and comes back as if never stopped; 32 to 128 real voices is typical
Learn FMOD The free course list (Skill Tree, the Celeste project). The Skill Tree needs a sign-in and was not read
Wwise help: interactive music (music segments, switch and playlist containers, the transition matrix, stingers) Exit at next bar, beat, grid or cue; sync to the entry cue or the same time; stinger cooldowns; pre-entry and post-exit for reverb tails
Wwise help: attenuation and mixing Distance curves for volume and filters; obstruction (direct sound only) versus occlusion (reverb sends too); bus hierarchy, auto-ducking and HDR
Unreal Engine 5.8, "Audio Modulation Quick Start" Control buses split into designer buses (ambience, foley, footsteps) and user buses (dialogue, music, SFX) driven by the settings menu; reductions add in dB
Godot 4.7 class reference and the 4.7.2 engine source Everything in the Godot column below
Sony ASWG-R001 v1.10 (2013) Loudness targets and how to measure them
IESD Mix Recommendations v03.02 (G.A.N.G., 2015) The same console target from the industry body; a different mobile target
EBU R128 and ITU-R BS.1770 What integrated loudness, true peak and loudness range mean, and how they are gated
Joonas Turner's GDC talk on game feel with sound (gdc/game-feel-with-sound.md) Action sounds: start on the hit, short first, one 5 to 20 ms impact layer, one recording and master chain per family, slight ducking under the player's actions; the source of audio's onsetMs warning
Godot 4.7, "Sync the gameplay with audio and music" The song clock: playback position plus time since the last mix minus output latency, discarding readings that go back; the system clock drifts over long songs
John Johanas, Hi-Fi Rush GDC talk (notes) Landing each action's impact on the beat by changing its animation speed; rewarding on-beat play without punishing off-beat play
Guy Somberg, "Lessons Learned from a Decade of Audio Programming" (GDC, 2014 inferred; notes in gdc/decade-of-audio-programming.md) Max within radius, a voice cap per spot that keeps every direction audible; integer voice handles; 6 dB as half or double
Dominic Vega, "Building a Mixing Sandbox for Just Cause 4" (GDC talk; notes) Snapshots driven by game state and time instead of sidechains for priority (a sidechain on the lowest bus is nearly always on, so its sounds get mastered hot); a storm's mix changing over 15 and 25 s; ambience muted past five engaged enemies; the player's vehicle moved to a higher bus instead of boosted
bfxr2 (Stephen Lavelle, MIT; its synthesis after Thomas Vian's SfxrSynth, Apache-2.0; wavetables AKWF, CC0) sfx: the Bfxr synth, its seven presets and its seeded random numbers, ported to C# (ci/godot/tools/Sfxr.cs)
Xbox Accessibility Guideline 105 Separate volume or mute for music, voice, effects, ambience and narration, and a mono option

Sound effects from a seed (sfx)

bfxr2's Bfxr synth is DrPetter's sfxr as extended by bfxr: an oscillator (square with a sweeping duty, saw, sine, triangle, noise, bit noise, tan, whistle, breaker and three AKWF wavetables), an attack, sustain-with-punch and decay envelope, pitch slides, vibrato, two pitch jumps, a repeat, low- and high-pass filters, a flanger, bit crush and a compressor, rendered 8 times per output sample at 44.1 kHz. Sfxr.cs translates Bfxr_DSP.js (engine 1.0.4), the presets in Bfxr.js (pickup_coin from its template, as bfxr's editor and library do) and the mulberry32 generator and FNV-1a seed that lib/bfxrlib.js installs as Math.random, so the kit and bfxr2 make the same sound from the same seed. riffwave.js (GPL-2) was not used: the WAV writer is the kit's own.

Checked in October 2026 with bfxr2's library under Node.js 22: for each of the seven presets at seeds 1, 12345 and 777, the seed, every preset parameter and every sample were identical (21 sounds, largest difference 0). The .bfxr files sfx writes, opened by the same library, rendered to within half a 16-bit step of the WAVs. Godot 4.7.2 imported them as 44.1 kHz mono AudioStreamWAV. tests/Test-Sfx.ps1 keeps the seed-1 length, RMS and three samples of each preset, so a change is caught without Node.js.

Middleware ideas in Godot

Middleware Godot 4.7
Group bus An AudioServer bus; every player's Bus
Return bus and send A bus that other buses send to, holding a shared reverb; an Area3D with a reverb bus sends a room's sounds to it
VCA, Unreal user bus The player-facing buses (Music, Voice, SFX, Ambience, UI) kept at 0 dB in the layout and set only by the settings menu
Snapshot A set of bus volumes and enabled effects, faded with a Tween
Horizontal resequencing, transition matrix AudioStreamInteractive and its transition table
Vertical remixing AudioStreamSynchronized
Playlist container AudioStreamPlaylist
Multi instrument, random container AudioStreamRandomizer
Max instances and stealing MaxPolyphony per player (oldest stolen); categories and priorities in your own code
Virtual voices Not built in: do not start sounds out of range
Attenuation curve AttenuationModel, UnitSize, MaxDistance, the attenuation filter
Obstruction and occlusion Not built in: ray-cast and lower volume and filter cutoff
Sidechain ducking AudioEffectCompressor.Sidechain
Master limiter AudioEffectHardLimiter

Godot facts that are easy to get wrong

Checked against the 4.7.2 source or by running it.

Loudness

ASWG-R001 v1.10 recommends the following. Version 1.0 said -23 LUFS, which is why some articles quote that figure.

IESD agrees for consoles (-24 ± 2 LU, -1 dBTP) and gives -16 ± 2 LU for mobile, with a loudness range of 10 to 15 LU. LUFS and LKFS are the same unit.

The audio command measures with ffmpeg's loudnorm filter, which reports input_i (integrated), input_tp (true peak) and input_lra (range):

Figures with no official source

The FMOD and Wwise manuals give none of these figures, so the skill offers them only as starting points to set by ear:

The FMOD compressor's own defaults are 2.5:1, 20 ms attack and 200 ms release.

Mono and voice budgets (measured October 2026)