For most games, ship OGG Vorbis for long music and ambience, and uncompressed WAV for short, frequently triggered sound effects. Keep FLAC as a lossless archive and master format, not a runtime format, because Godot and Unreal do not import it natively. Choose WAV when a loop must be sample-exact, and OGG when download size or memory matters more.
Last reviewed: October 2026
Which audio format should a game ship?
The honest answer is "more than one". A typical game mixes a few hours of music, hours of ambience, and thousands of tiny effects. Each has different needs, so each earns a different format:
- Music and long ambience: OGG Vorbis. Files are roughly a tenth of the size of WAV at sensible quality settings, and engines can stream them from disk.
- Short, repeated effects (footsteps, UI clicks, impacts): WAV, or whatever your engine converts to internally. Decoding a lossy file every time a footstep plays wastes CPU for almost no size gain on a half-second clip.
- Your master archive: FLAC or WAV, kept outside the game project. Always export from the lossless master, never from an already compressed file.
Everything below is guidance. Exact numbers shift with content and encoder settings, so test with your own tracks.
OGG vs WAV vs FLAC: the comparison
| WAV (PCM) | FLAC | OGG Vorbis | |
|---|---|---|---|
| Compression | None | Lossless | Lossy |
| Typical size vs 16-bit WAV | 100% | Often about half | Often about a tenth at mid quality |
| Audible quality | Exact | Exact | Very good at higher quality settings |
| Built-in loop points | Yes, via a smpl chunk | No standard | No standard (tags are not widely read) |
| Decode cost | None | Low | Low to moderate |
| Godot 4 | Native | Not a native import format | Native |
| Unity | Native | Imported | Native |
| Unreal | Native | Not a stock import format | Not a stock import format |
A stereo, 16-bit, 44.1 kHz WAV runs about 10 MB per minute. Go to 24-bit and 48 kHz and it is closer to 17 MB per minute. A Vorbis file at around 160 kbps is roughly 1.2 MB per minute. Ten tracks of three minutes each are about 300 MB as WAV and 36 MB as Vorbis, which is the difference between a comfortable mobile download and a painful one.
Does lossy compression ruin game music?
Rarely. Vorbis at medium-to-high quality is transparent for most players on most speakers, and game music is usually heard under sound effects and dialogue anyway. Problems show up in two places:
- Very low bitrates, where cymbals and sustained pads smear and get a "swirly" quality.
- Repeated re-encoding. If you convert a Vorbis file to another lossy format, errors stack up. Encode once, from the master.
If you are unsure, encode a test loop at two quality levels, loop it for a minute with headphones on, and trust your ears. Pick the lowest setting you cannot distinguish from the higher one.
How do looping and gapless playback differ per format?
This is where formats actually bite, because music in games loops, and a click at the seam is the most common audio bug in indie projects.
- WAV can carry loop points in a
smplchunk. Godot and most middleware read it on import, so the loop is described by the file itself. WAV is also sample-exact: what you rendered is what plays. - OGG Vorbis has no equivalent chunk that engines agree on. In practice you loop the whole file and set the loop flag in the engine. If the encoder preserved the exact sample count, a looping decoder repeats exactly the rendered length. If the engine restarts the decoder at the seam, a faint tick can appear. Test every looped track on the target platform.
- FLAC can loop the whole file where supported, but there is no widely used loop-point standard.
- MP3 is best avoided for loops, since encoder padding adds silence at the start and end.
For tightly looped music, render the loop to a whole number of bars so the end connects to the start musically too. The same idea is covered in adaptive music 101, where every state shares one loop length so transitions stay phase-aligned.
How do Godot, Unity and Unreal handle each format?
Godot 4 imports WAV and Ogg Vorbis (and MP3). WAV import exposes loop mode in the Import dock, and the smpl loop is read when present. For Ogg, you set the loop on the imported stream. Step-by-step wiring is in the Godot adaptive music tutorial.
Unity accepts WAV, OGG, FLAC and others, then re-encodes on import according to each clip's settings. The setting that matters most is the load type:
- Decompress On Load for short effects: fast to play, uses more memory.
- Compressed In Memory for mid-length clips: smaller in RAM, small CPU cost per play.
- Streaming for long music: tiny memory footprint, reads from disk while playing.
Unity reads no loop points from Vorbis, so the loop is the whole clip. See how to add adaptive music in Unity for a controller that handles this.
Unreal Engine is the awkward one. Stock Unreal imports WAV and cooks it into its own compressed format at package time, so the source format you ship in the project is effectively WAV. Stock Unreal cannot import .ogg, so if your tools export OGG, convert to WAV for Unreal or use a Vorbis import plugin. Check the current documentation for your engine version, since import support changes between releases.
Streaming or decompress on load?
The decision is mostly about clip length and how often it plays:
- Under about 2 seconds, plays often: decompress to PCM and keep it in memory. Footsteps, gunshots, clicks.
- A few seconds to roughly 20-30 seconds: keep compressed in memory, or decompress if memory allows. Stingers, short ambience loops, voice lines.
- Longer than that: stream from disk. Music, long ambience, cutscene audio.
Those thresholds are rules of thumb. Profile on your lowest-spec target device, because the real limit is whichever of CPU, RAM or disk speed runs out first.
What about mobile?
Mobile changes the weights. Storage and download size matter, RAM is tight, and decoding competes with everything else for battery. A workable default is Vorbis for music (streamed), and a small set of short effects held as PCM or an engine-native low-cost codec. Avoid decoding several long compressed tracks at once. If you layer adaptive stems, remember that every simultaneous stream is a decoder running, so a four-layer track costs about four times the decode work of one.
Which sample rate and bit depth?
Ship 44.1 kHz unless your pipeline standardises on 48 kHz. Going higher than 48 kHz for game playback adds size without audible benefit for music and effects. For 16-bit versus 24-bit: author at 24-bit, ship 16-bit. The extra headroom helps while mixing, but players cannot hear it in the final file, and it makes WAVs 50% larger.
How Mowjera exports these formats
Mowjera, a browser-based DAW for adaptive game music, exports WAV at 16-bit or 24-bit and 44.1 or 48 kHz, with a smpl loop chunk so engines see the loop. It also exports FLAC and OGG Vorbis. Vorbis quality ranges from -1 to 10 with a default around 160 kbps. The renderer works at 44.1 kHz internally, so a 48 kHz export is resampled and adds no new high-frequency detail. Per-state loops are rendered to whole bars. There is no MP3, Opus or AAC export. If you want to try it, open the editor and export a loop in two formats to compare.
FAQ
Is OGG or WAV better for game music?
OGG Vorbis is better for most shipped music because it is far smaller and streams well. WAV is better when the loop must be sample-exact or you want zero decode cost. A common compromise is WAV for short effects and tightly looped stingers, and OGG for long background tracks.
Does Unreal Engine support OGG files?
Stock Unreal does not import .ogg files directly. Import WAV instead and let Unreal compress it when you cook the project, or add a Vorbis import plugin. Always confirm against the documentation for your engine version, since import support can change between releases.
Is FLAC good for games?
FLAC is excellent for archiving masters because it is lossless and about half the size of WAV. As a runtime format it is weaker: Godot and stock Unreal do not import it natively, and you gain nothing over WAV once the engine re-encodes. Keep FLAC for storage and delivery to collaborators.
Why does my OGG loop have a click?
Usually the decoder restarts at the end rather than looping gaplessly, or the file was encoded from a non-bar-aligned render. Re-render the loop to a whole number of bars, set the engine's loop flag on the whole stream, and test on the target device. If the seam must be exact, use WAV with loop points.
What bitrate should I use for OGG game music?
Start around 128 to 192 kbps (Vorbis quality 4 to 6), then test. Lower is fine for background ambience, while exposed solo instruments and cymbals reveal artifacts first. Pick the lowest quality where you cannot hear a difference with headphones on a looped passage.