Quick answer: Pygame on Android (via SDL2) silently capping mixer channels to 8 regardless of set_num_channels? Some SDL2 builds enforce a low cap - reinit with explicit channel count argument.

Set 32 channels on init. Audio drops still cap; debug shows only 8 channels active.

Reinit with init parameters

pygame.mixer.init(44100, -16, 2, 2048)
pygame.mixer.set_num_channels(32)

Explicit reinit before channel count. Some Android SDL builds need this order.

Or use a custom backend

For high channel counts, the FMOD or miniaudio Python bindings offer more channels. Heavier integration; greater capacity.

Detect at runtime

Check get_num_channels() after set; warn if mismatched. Falls back to your prioritization logic.

“Audio APIs have platform caps. The caps are silent by default.”

If your game uses many simultaneous sounds, the audio system is a per-platform concern. Test on each target's audio output.

Related reading