How loud should game sound effects be?
A file peaking at 0 dBFS can clip after the engine re-encodes it. Why -1.5 dBTP, what true peak measures, and why per-file normalisation hurts.
- A file at 0 dBFS can exceed 0 once an engine re-encodes it
- True peak catches what a sample-peak meter cannot
- Normalise the pack as a whole, never file by file
How loud should game sound effects be?
Leave headroom rather than chasing a number. Sound effects are mixed against music, dialogue and each other at runtime, so the useful target is a consistent level across the pack with room left at the top: around -1.5 dBTP true peak is a safe ceiling that survives an engine re-encode. Loudness normalisation targets such as -23 LUFS belong to broadcast and to music, not to a one-second impact.
What is true peak and why is it different from the peak my editor shows?
Most meters show sample peak: the highest sample value in the file. True peak estimates the highest value of the analogue waveform reconstructed between those samples, which can be higher than any single sample. A file that reads -0.1 dBFS on a sample-peak meter can have inter-sample peaks above 0, and those clip when the file is converted, re-encoded or played through a limiter.
Why does audio clip after importing it into Unity?
Because Unity compresses the clip on import, usually to Vorbis, and a lossy encoder does not preserve peak levels. It reconstructs a waveform that can overshoot the original, so a file mastered flat against 0 dBFS comes out the other side above 0 and clips on playback. Leaving 1.5 dB of true-peak headroom absorbs that overshoot. This is not theoretical: a 450-sound library here was rejected by the Asset Store with 'Check Audio Clipping' - the only rejection out of eighteen submissions - and the cause was one pack that had gone out at +1.20 dBTP with fifteen files over spec.
Should I normalise each sound effect to the same level?
No. Normalising file by file destroys the relationship between sounds: a distant door and a gunshot next to the player's head end up the same loudness, and every sense of distance and weight in the pack is gone. Apply one uniform gain to the whole pack so the loudest file lands at the ceiling and everything else keeps its relative position. A waveform sheet of a well-levelled pack looks uneven, and that is correct.
How do I check levels across a whole pack quickly?
Measure true peak per file with a tool that reports it explicitly - ffmpeg's ebur128 filter with peak=true is enough - and look at the distribution, not just the maximum. Anything above the ceiling is a hard stop. Then re-measure after any editing pass, because trimming, fading and DC-offset removal all change samples and can push the peak back up: a pack here went from -1.50 to -1.40 dBTP purely from a fade pass, and would have shipped over spec if the only measurement had been the one taken before it.
Does a loudness meter catch a clicking file?
No, and that catches people out. Level and edge discontinuity are unrelated faults: a file can sit perfectly at -1.5 dBTP and still start on a hard cut that clicks on every play. They need two different checks.
The companion to this is why sound effects click in Unity, which is the fault a level meter will never show you.