--- a/src/MacSrc/Shock.c +++ b/src/MacSrc/Shock.c @@ -162,6 +162,17 @@ void InitSDL() { SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1"); SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); +#ifdef __ANDROID__ + // SDL2 2.28.5's AAudio backend (Android's default since API 26) only + // ever allows one open non-capture (playback) device at a time - it + // keeps a single static handle and asserts on a second open + // ('SDL_assert((audioDevice == NULL) || iscapture)' in + // src/audio/aaudio/SDL_aaudio.c). SDLSound.c opens two: one directly via + // SDL_OpenAudioDevice() for cutscene audio, one via Mix_OpenAudio() for + // SFX/MIDI. The older OpenSL ES backend has no such limitation, so force + // it instead of AAudio. + SDL_SetHint(SDL_HINT_AUDIODRIVER, "openslES"); +#endif if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO) < 0) { DEBUG("%s: Init failed", __FUNCTION__); }