Quick answer: Build an audio test matrix covering every trigger, multiple output devices, and all target platforms — test it manually each milestone, hook audio error callbacks into your crash reporter, and pay special attention to platform-specific restrictions like iOS autoplay policy and Android audio focus.
Audio is the last thing most indie developers test and the first thing players notice when it goes wrong. A missing footstep sound, music that cuts out after loading a save, or a sound effect stuck looping forever — these aren’t subtle. They break immersion immediately and generate a disproportionate number of support tickets relative to how rare they seem during development.
Why Audio Bugs Escape Into Shipping Builds
The core problem is that audio bugs are nearly impossible to catch with automated tests. A CI pipeline can verify that your game logic produces the right output, but it cannot easily verify that the sword swing sound actually played at the correct volume, with the right reverb, without clipping. That requires either a human tester with headphones or specialized audio analysis tooling that almost no indie studio has.
Compounding this: developers tend to test on the same machine with the same audio output device throughout a project. A bug that only manifests on HDMI output, or on a specific Bluetooth headset, or on Android devices with aggressive audio focus management, simply never surfaces in that environment. It ships.
The solution isn’t to build an automated audio testing pipeline (though that’s a worthy long-term goal). It’s to build a structured manual test matrix and actually run it at each milestone, combined with runtime logging that catches audio errors your testers might miss.
The Most Common Audio Bugs in Games
Before you can build a test matrix, you need to know what you’re looking for. These are the categories of audio bugs that appear most frequently in indie game post-mortems and support queues:
- Sounds that don’t play. The trigger fires, but no audio is heard. Causes: missing audio file reference after asset rename, audio bus misconfiguration, channel limit reached (audio system stopped playing new sounds because all channels were occupied).
- Sounds that play when they shouldn’t. A sound effect fires in the wrong game state — footstep sounds while the character is airborne, combat music during a cutscene. Usually a state machine bug or an event listener that isn’t cleaned up when a scene changes.
- Wrong audio playing. A sound effect plays successfully but it’s the wrong one — the death sound plays on level complete, or a background music track is swapped. Usually caused by incorrect asset assignments or a typo in a string-keyed audio lookup.
- Audio cutting out on certain platforms. Works on Windows, silent on macOS, distorted on Linux. Platform audio driver differences, sample rate mismatches, or codec incompatibilities are common culprits.
- Audio desync. Sound effects that should be synchronized with animations or game events gradually drift apart. Particularly noticeable in cutscenes, rhythm games, or any moment where audio timing is critically visible. Usually caused by frame rate dependence in timing calculations.
- Volume normalization issues. Sound effects that are dramatically louder or quieter than intended, or that vary in volume across playthroughs when they should be consistent. Often caused by bus volume settings being modified in code and not reset properly.
- Looping bugs. A one-shot sound starts looping, or a looping ambient track stops and never restarts. Caused by incorrect loop settings on the audio asset or failed stop calls when transitioning between scenes.
Building Your Audio Test Matrix
An audio test matrix has three axes: what triggers the audio, what device is playing it back, and what platform is running the game. At each milestone, you want coverage across all three.
Trigger coverage. List every event in your game that should cause audio to play. This is usually longer than you think — footsteps on each surface type, UI button clicks, menu open/close, every ability or action, ambient environment changes, music transitions, voice lines, notification sounds. Run through each trigger and confirm it fires, sounds correct, and stops correctly. This is tedious but it’s the only way to catch silent triggers before players do.
Output device coverage. Test on at minimum:
- Stereo headphones (wired)
- Stereo speakers
- HDMI output (TV or monitor with built-in speakers)
- Bluetooth headset (if your target platform supports Bluetooth audio)
- System default output (whatever the OS has selected)
HDMI audio is a common source of bugs on desktop platforms because the system audio device changes when the TV is connected and some engines don’t handle the device switch gracefully. Test it explicitly.
Platform coverage. For each platform you ship on, run the full trigger list at least once. Don’t rely on cross-platform reports from testers who happen to be on the same OS as you. If you’re shipping on Windows, macOS, Linux, iOS, and Android, you need testers on all five for audio validation.
Platform-Specific Audio Gotchas
Some audio bugs only appear on specific platforms. Here are the ones that catch indie developers most often:
iOS: User gesture requirement. iOS does not allow audio to play until the user has interacted with the screen at least once. If your game tries to play audio on load before the player has tapped anything, it will silently fail. Gate your audio initialization on the first user interaction event. Test this on a real device — the iOS simulator does not enforce this restriction.
Android: Audio focus. Android’s audio focus system means another app (a phone call, a notification, a competing app) can take audio focus away from your game. Your game should handle audio focus loss gracefully: pause audio when focus is lost, resume when it’s regained. Failing to handle this correctly causes audio to continue playing during calls or to go silent and never recover.
HTML5/WebGL: Autoplay policy. Browsers block audio autoplay without user interaction, similar to iOS. Additionally, Web Audio API behavior differs between browsers — test in Chrome, Firefox, and Safari separately. Safari in particular has historically had quirks with certain audio formats and sample rates.
Linux: PulseAudio vs PipeWire vs ALSA. Linux has multiple audio subsystems that behave differently. A build tested only against PulseAudio may have issues on systems running PipeWire or ALSA directly. If you support Linux, try to test against at least two audio backends.
Logging Audio Event Failures to a Crash Reporter
Manual testing catches bugs in the builds you test, but your players will encounter configurations you never tested. Runtime logging fills that gap.
Most game engines expose hooks for audio system errors. In Godot, you can connect to the AudioServer’s error signals. In Unity, the OnAudioFilterRead callback and audio mixer logs can surface issues. Wherever your engine provides a hook, attach a callback that logs audio failures to Bugnet as non-fatal events.
Useful context to include with audio error events:
- Audio device name and driver version
- Current audio bus configuration (sample rate, buffer size)
- Name of the sound asset that failed to play
- Current game state or scene at the time of failure
- Whether this is the first audio error in the session or a repeated failure
Logging these as non-fatal Bugnet events means they show up in your bug tracker without blocking the player. Over time, you’ll see patterns: a specific audio asset that fails on Linux, an audio bus initialization error that only appears on certain Android GPU configurations, or a missing audio file that only manifests in a specific scene transition.
“Players will forgive a lot of things. They’ll grind past a difficult section, they’ll work around a UI annoyance, they’ll accept slightly rough edges in an indie game. But they will write a Steam review about the game having no sound.”
Testing Save-State Audio Bugs
One category of audio bug that’s easy to miss: bugs that only appear after loading a save file. These are particularly insidious because your normal play-through testing never exercises the code path of loading mid-game.
Common save-state audio bugs include:
- Music doesn’t resume after loading. The save/load system restores player position and inventory but doesn’t restore the current music track. The player loads their save and is greeted by silence.
- Wrong music plays after loading. The load system starts the default track instead of the contextually correct one for the area the player saved in.
- Ambient sound loops are duplicated. Loading a save triggers ambient sound initialization again without stopping the sounds that were already playing, causing the same ambient loop to play twice at once.
- Sound effects are stuck in a playing state. A sound that was playing when the player saved (footsteps, ability sound) is serialized as “playing” and starts playing again on load, never triggering the stop event.
Add a dedicated save-load test to your audio matrix. Save in multiple different game states (different areas, during combat, during a cutscene if your game allows it), then load each save and verify the audio state is correct. This takes about twenty minutes and will catch bugs that would otherwise only surface in player reports.
Integrating Audio QA Into Your Release Process
Given that audio testing is mostly manual, the key is making it systematic rather than ad hoc. At each milestone before release:
- Run the full audio trigger list on one primary platform (usually your main desktop target).
- Run a focused test on any audio systems that changed since the last milestone.
- Run platform-specific audio tests on each non-primary target (mobile, console, browser).
- Run the save-state audio test suite.
- Verify the audio error logs in Bugnet for anything unusual from QA sessions.
Track audio bugs in Bugnet with a dedicated label (e.g., “audio”) so you can quickly filter and see how many are open at any given time. Audio bugs have a tendency to accumulate quietly — they’re not crashing the game, so they get deprioritized — and then surface all at once in launch reviews.
If you can only do one thing: test audio on HDMI output and after loading a save. Those two scenarios catch a disproportionate share of the bugs that make it to launch.