Quick answer: Your sound is almost certainly in a non-default audio group that is not loaded on Android. Call audio_group_load in the Game Start event, wait for audio_group_is_loaded to return true, then play the sound. Also re-encode any MP3 assets as OGG Vorbis.
You export your GameMaker game to Android, install the APK on a device, and the game runs fine visually — but it is completely silent. Music does not play. Sound effects do not fire. You go back to the IDE and the audio is working perfectly. This is one of the most common platform-specific bugs in GameMaker, and it almost always comes down to the audio group system not behaving the way Android expects.
The Symptom
The symptoms vary depending on which specific cause you hit, but usually include at least one of these signatures:
Music tracks stay silent but sound effects work fine (or vice versa). Audio plays on the first scene but stops after a room change. Audio works in development builds but not in release builds. Calling audio_play_sound returns a valid instance ID but no sound comes out. The GameMaker IDE shows no errors, the logs show no warnings, and the exact same project plays audio perfectly on Windows, macOS, and HTML5 exports.
On a few Samsung devices you may see sporadic audio output that cuts in and out, which is a slightly different bug related to the device's audio focus handling. We will cover that case at the end.
What Causes This
1. Non-default audio groups are not loaded. GameMaker lets you organize sounds into audio groups for memory management. On desktop platforms, GameMaker often resolves groups lazily and your sounds play even if you forgot to load the group. On Android, memory constraints mean the runtime will only load groups you explicitly request. Any sound in an unloaded group fails silently — no error, no warning, just no audio.
2. MP3 decoding inconsistencies. GameMaker re-encodes audio on export, but MP3 imports can pass through in a format the Android media server rejects. The sound appears in your build but the decoder fails at runtime, leaving you with a valid handle and no audio.
3. Audio focus loss. Android OS aggressively manages audio focus. When your game loses focus (notification, phone call, screen lock, splash ad), Android pauses your audio session. GameMaker does not always restore it automatically when focus returns, especially on older SDKs.
4. Sample rate mismatch. A handful of budget Android devices do not support arbitrary sample rates. If your WAV is encoded at 48kHz and the device only handles 44.1kHz, some runtimes silently drop the sound.
The Fix
Step 1: Audit your audio groups.
Open the GameMaker IDE and go to Game Options → Main → Audio Groups. Note which groups exist. Then right-click each sound asset you care about and verify which group it is assigned to. Sounds in the group named audiogroup_default are loaded automatically. Everything else must be explicitly requested.
Step 2: Load the groups in a Game Start event.
// obj_game_controller: Game Start event
global.audio_groups_pending = ["audiogroup_music", "audiogroup_sfx"];
global.audio_groups_ready = false;
for (var i = 0; i < array_length(global.audio_groups_pending); i++) {
audio_group_load(global.audio_groups_pending[i]);
}
Step 3: Wait for groups to finish loading before playing audio.
Group loading is asynchronous. You must not call audio_play_sound on a sound until its group has finished loading, or the call will fail silently on Android.
// obj_game_controller: Step event
if (!global.audio_groups_ready) {
var all_loaded = true;
for (var i = 0; i < array_length(global.audio_groups_pending); i++) {
if (!audio_group_is_loaded(global.audio_groups_pending[i])) {
all_loaded = false;
break;
}
}
if (all_loaded) {
global.audio_groups_ready = true;
audio_play_sound(snd_music_title, 10, true);
}
}
Step 4: Re-encode MP3 assets as OGG Vorbis.
Open each sound asset that uses MP3 compression and switch the import to the original WAV source (or convert with Audacity, ffmpeg, or any audio editor). Use these settings:
- Music tracks: OGG Vorbis, 128–192 kbps, 44.1 kHz, stereo
- Sound effects: Uncompressed WAV, 44.1 kHz, mono unless you need stereo panning
- Voice/dialog: OGG Vorbis, 96–128 kbps, 44.1 kHz, mono
Match the sample rate to 44.1 kHz for broad compatibility. Some devices handle 48 kHz fine but a small fraction do not, and the 10% quality difference is not worth the coverage loss.
Step 5: Handle audio focus properly.
// obj_game_controller: Async - System event
if (async_load[? "event_type"] == "window_focus_changed") {
var focused = async_load[? "focused"];
if (focused) {
// Resume paused music
if (audio_is_paused(global.music_instance)) {
audio_resume_sound(global.music_instance);
}
} else {
audio_pause_sound(global.music_instance);
}
}
Testing on Real Devices
The Android emulator's audio stack is a reasonable but imperfect approximation of real hardware. Always test on at least two physical devices: one modern flagship (Pixel or high-end Samsung) and one budget device from the last three years. Budget devices are where these audio bugs manifest most reliably.
Watch adb logcat during the test and grep for AudioTrack, MediaCodec, or YoYo. The Android media server will often log a warning when it rejects a decode, which gives you a direct clue:
$ adb logcat | grep -E "AudioTrack|MediaCodec|YoYo"
W/YoYo : audio_play_sound called before audio_group_load completed
W/MediaCodec: Unsupported sample rate 48000 for PCM output
"Audio silently failing on Android is a rite of passage for GameMaker devs. You will ship the game once without audio, get a one-star review for it, and then forever after you will write the audio_group_load code before you write any sound playback code."
Related Issues
If your audio plays but at the wrong pitch or speed, see audio not playing on first touch for the mobile autoplay gotchas that apply across engines. For save data migration issues that can also affect audio settings between updates, read debugging save file migration bugs.
Always test audio on a real, budget Android device. The emulator lies.