Sound formats: I switched from MP3 to WAV, and try OGG
Project settings: I’ve tried adjusting audio/driver/output_latency (e.g. setting it to a lower value) but it didn’t solve the issue.
My questions:
Is there currently any officially recommended way to achieve low-latency audio on Android with Godot 4.6?
Are there any practical workarounds or project settings that significantly reduce audio delay on Android in real projects (besides using WAV and preloading sounds)?
On desktop everything is fine, so this seems specific to the Android audio backend.
Any up‑to‑date advice for 2026 would be greatly appreciated.
It seems to be a general problem with the current audio driver that might be resolved with this proposal:
In the documentation of this setting, it says this:
Note: This setting is ignored on Android.
You can try fiddling with AudioServer::get_output_latency() to adjust your actions to match the audio latency:
Here someone mentioned that changing the file format to OGG fixed the problem for them.
Another person mentioned that changing volume is instantanous, so if that makes sense in your case then you can try doing the same.
this is the easiest way to get the biggest latency win on android. with these interfaces on, android blocks the stream for fast track access, see the part about interfaces here Audio latency | Android NDK | Android Developers
I only had to make changes to audio_driver_opensl.cpp mainly: for output mix remove evironmentalreverb: should look like this { // Create OutputMix without optional effect interfaces (required for fast-track). res = (EngineItf)->CreateOutputMix(EngineItf, &OutputMix, 0, nullptr, nullptr); } then here remove effectsend and add the configuration: / Create the music player */ { // Request only the interfaces that are compatible with the Android fast-track path. const SLInterfaceID ids[2] = { SL_IID_BUFFERQUEUE, SL_IID_ANDROIDCONFIGURATION }; const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; res = (*EngineItf)->CreateAudioPlayer(EngineItf, &player, &audioSource, &audioSink, 2, ids, req); ERR_FAIL_COND(res != SL_RESULT_SUCCESS); } SLAndroidConfigurationItf configItf = nullptr; res = (player)->GetInterface(player, SL_IID_ANDROIDCONFIGURATION, (void)&configItf); if (res == SL_RESULT_SUCCESS && configItf) { SLuint32 performance_mode = SL_ANDROID_PERFORMANCE_LATENCY; (*configItf)->SetConfiguration(configItf, SL_ANDROID_KEY_PERFORMANCE_MODE, &performance_mode, sizeof(performance_mode)); }