A desktop game can get away with dozens of uncompressed WAV files sitting in the asset folder. A mobile game cannot. Storage, download size and runtime memory are all tighter on phones and tablets, and audio is one of the easiest places to lose space without losing quality. But the size of the files is only half the problem. The other half is what the audio system does with them at runtime.
This article covers both sides: reducing the audio data itself, and configuring the playback system so that the game does not waste CPU decoding or mixing sounds that the player is not hearing. The sound design decisions themselves are covered elsewhere, including in How to Make Game Sound Effects, and this article assumes you already have the sounds you need.
Why Audio Optimization Is Different on Mobile
On a desktop, sound effects are usually played through a full audio pipeline with plenty of CPU headroom and no meaningful storage limit. On mobile, three constraints change the picture.
- Storage and download size. App stores impose size limits, and many players will not download a large game over cellular data. Audio files count toward that size directly.
- Runtime memory. A compressed file on disk still has to be decompressed into RAM to be played. A short game with hundreds of sounds can consume more memory than expected.
- CPU and battery. Decoding and mixing audio uses CPU cycles and battery. Playing many simultaneous sounds, or using expensive streaming formats, shortens session time and can cause audio dropouts on lower-end devices.
Optimizing for mobile means addressing all three, not just shrinking the WAV files.
Choose the Right Format
The single biggest decision for mobile audio is the file format. WAV is lossless and simple, but it is also large. Compressed formats are much smaller, at the cost of some quality and decoding complexity.
For mobile game sound effects, the common options are:
- WAV (uncompressed PCM). The default format for game audio, but the largest. A one-second stereo WAV at 44.1 kHz and 16-bit is about 172 KB. Sound effects rarely need to be this large on mobile.
- OGG Vorbis. A compressed format that is well supported on Android and in most engines. It offers good quality at a fraction of the WAV size, and the decoding cost is manageable for short effects.
- MP3. Widely supported, but with higher licensing considerations historically and slightly higher decode latency than OGG. Less common for game sound effects today, but still used for music.
- ADPCM. A middle ground: about 4x smaller than PCM, with very low decoding cost. It is a good fit for short effects that need to stay in memory.
The right choice depends on the engine and the target platform. Unity's audio importer, for example, offers platform-specific compression settings that let you use different formats on iOS, Android and desktop. Unreal and Godot have their own compression options. The important point is not to ship raw WAV files for every effect if a compressed format would serve the same purpose.
Lower the Sample Rate
A 44.1 kHz sample rate is designed to capture the full range of human hearing. Most game sound effects do not need that range. A click, a coin, a footstep or a UI notification contains almost no useful content above 10 kHz.
Resampling short effects to 22.05 kHz halves the data size with minimal audible difference on most mobile devices, which already have limited high-frequency reproduction through their built-in speakers. For effects that are deliberately retro, 11.025 kHz is a common target, and it aligns with the techniques described in How to Make 8-Bit Sound Effects.
The exception is music and long ambient loops, which usually benefit from a higher sample rate to preserve tone and texture. The rule of thumb is to lower the sample rate on short effects, and leave music and ambience at their original rate unless size becomes a problem.
Convert Stereo to Mono
Stereo audio contains two channels of data; mono contains one. For most short sound effects, the second channel adds no useful information, because the sound has no meaningful stereo image at its short duration.
Converting a sound effect from stereo to mono halves its size. In a project with two hundred sound effects, that is a significant reduction, and the audible difference is usually imperceptible for anything under a second long.
The sounds that do benefit from stereo are the same ones that benefit from a higher sample rate: music, ambience and any long effect where the stereo field is part of the design. A UI click, a coin, a hit or a footstep should be mono in almost every case.
Engines typically apply spatialization and panning at runtime based on the sound's position in the world, so pre-rendered stereo is redundant for most 3D sound effects. This is why mono is the default recommendation for anything that plays at a position in the game world.
Trim Silence and Tighten the Envelope
Silence at the beginning or end of a sound effect is wasted data, and it also delays the start of the sound when played. Trimming silence is a small change that improves both file size and responsiveness.
A sound effect should start at the first meaningful sample and end when its tail has finished. If the file contains a second of silence before the sound begins, that second is being loaded, decompressed and buffered for no reason.
The same principle applies to the decay. A long tail is often kept because it sounds good in isolation, but on mobile it adds file size and can overlap with the next instance of the same sound. Trimming a tail to the point where the sound is still convincing is one of the easiest optimizations. The same technique appears in the coin sound article, where keeping the effect short is part of the design, not just an optimization.
Limit Simultaneous Voices
Voice count is the number of sounds playing at the same time. It has a direct effect on both CPU usage and memory, because the audio system has to mix every active voice together in real time.
Mobile devices have a lower practical limit than desktops. The exact number depends on the device and the engine, but a common target is around 16 to 32 simultaneous voices. If a game regularly exceeds that, audio dropouts and frame drops become likely.
The fix is not to reduce the number of sound events in the game, but to prioritize them. A common approach is a voice pool with priority levels. When the maximum voice count is reached, the lowest-priority sound is either dropped or faded out to make room. A coin sound might have a low priority, while an important combat impact or a warning sound has a higher one.
Engines typically expose voice limiting as a project setting or a per-sound setting. Unity's Audio Mixer and Audio Source components both have options for controlling priority and concurrency. Godot's audio buses offer similar control.
Use Streaming for Long Sounds, Preload for Short Ones
Audio files can be loaded in two ways: entirely into memory (preloaded) or streamed from disk as they play. Each approach has a different cost profile.
Preloading puts the entire sound into RAM before it is played. Playback is instantaneous, and there is no decode cost during play. The cost is memory, which matters on mobile.
Streaming reads the sound from disk as it plays. Memory usage is low, but there is a small delay before playback starts, and the decode cost runs continuously while the sound is playing.
For short effects, preloading is usually the right choice. The memory cost of a one-second sound is small, and the instant playback matters for gameplay responsiveness.
For long sounds such as music and ambience, streaming is the right choice. Preloading a three-minute music track at full quality would consume significant memory, and the playback latency does not matter for a track that loops for minutes.
The rule of thumb is: preload anything under a second, stream anything over a few seconds. Between those two, judge based on how often the sound plays and how much responsiveness matters.
Compress on the Right Targets
Most mobile engines allow different compression settings per platform. This is an important feature, because the right format depends on the target device.
Android devices handle OGG Vorbis well, and ADPCM has very low decode cost on both Android and iOS. iOS uses a different hardware decoder, and some formats perform better than others. A common approach is:
- iOS. ADPCM for short effects (fast decode), AAC or MP3 for music.
- Android. Vorbis or ADPCM for short effects, Vorbis for music.
- Desktop. Vorbis or PCM, depending on the project.
This does not mean every effect needs a different format per platform. It means using the platform compression settings that the engine provides, rather than shipping the same WAV files to every target.
Optimize the Runtime, Not Just the Files
A project can have perfectly optimized audio files and still perform poorly because of how they are used at runtime. Several common patterns cause this.
- Spawning a new AudioSource per sound. Creating and destroying audio nodes at runtime causes allocation overhead. A pooled AudioSource that is reused is almost always better.
- Playing sounds that the player cannot hear. A 3D sound that is far from the player still uses a voice. Use the engine's distance culling or a custom proximity check to skip playback when it would be inaudible.
- Using reverb on mobile as on desktop. Reverb is expensive. Reduce or disable it on mobile if the project supports both platforms, unless the reverb is essential to the game's sound.
- Decoding audio on the main thread. Some engines decode audio synchronously, which can cause a frame hitch. Preloading short sounds and using asynchronous decode where available avoids this.
The specific patterns depend on the engine. The general principle is the same across all of them: prefer reuse over allocation, prefer skipping playback over playing silently, and prefer simpler processing over more expensive processing.
Test on the Target Devices, Not Just the Editor
Desktop testing does not reveal mobile audio problems. Performance, memory usage and even playback behavior differ between the editor and the device, and the differences are often large enough to make desktop testing misleading.
Test on a range of devices, including the lower end of the hardware range the game is targeting. A game that runs smoothly on a flagship phone may stutter on a mid-range device that the project also intends to support.
Watch for audio dropouts, hitches when a new sound plays, and increased memory usage over long sessions. These are the signs that audio is not being managed as efficiently as it could be, and they are usually easier to fix in configuration than in code.
A Working Order of Priorities
If a project needs to reduce audio size and improve performance, the changes that make the biggest difference with the least effort are usually, in order:
- Trim silence and shorten tails on every effect.
- Convert stereo effects to mono unless they need stereo.
- Lower the sample rate on short effects.
- Switch from WAV to a compressed format for effects that will not be played frequently enough to need instant playback.
- Limit voice count and set priorities on important sounds.
- Use preloading for short effects and streaming for long ones.
- Profile on the actual target devices and adjust based on what the measurements show.
No single step produces a dramatic improvement on its own, but together they usually reduce both file size and runtime cost by a large margin without an audible loss of quality.
Generate a Sound Optimized for Mobile
Open the SfxMaker generator and create a short, mono sound effect that is ready for mobile compression and playback.
Open SfxMaker Generator →Common Mistakes
- Shipping 44.1 kHz stereo WAV for every effect. This is the default and the most common cause of unnecessary file size on mobile.
- Keeping long tails for aesthetic reasons. A tail that adds atmosphere in a DAW often just adds size and voice pressure in a game.
- Ignoring voice count until the game stutters. Voice limiting is easier to set up before the game grows to hundreds of sounds than after.
- Streaming short effects. The latency introduced by streaming is acceptable for music but audible on a UI click or a coin pickup.
- Preloading long music tracks. Music that is preloaded at full quality can consume more memory than a full set of sound effects.
- Testing only on desktop. Mobile audio behavior is different enough that desktop testing cannot substitute for running the game on the actual target device.
What to Check Before Shipping
Measure the total audio asset size and the total runtime audio memory on the target device. Compare them against the budget for the project. If audio is taking more space or memory than expected, apply the priorities above rather than guessing which sounds to remove.
Listen to the game on the device itself, through the built-in speaker and through headphones. Mobile speakers reproduce a much narrower frequency range than desktop speakers, and effects that sound fine in the editor can be inaudible or harsh on a phone. The optimization choices should be made with the actual playback conditions in mind.
Finally, remember that optimization is a constraint on top of good sound design, not a replacement for it. A clean, short, well-designed sound effect is easier to optimize than a complicated one, and the same properties that make a sound work in the game usually make it smaller and cheaper to play.