Quick answer: Pygame Channel SFX cutting out the moment you call mixer.music.load? music.load briefly halts the mixer or reallocates channels — in-flight SFX get cut.
A music swap mid-game truncates a UI confirmation sound playing on Channel 0.
music Stops Things
mixer.music has its own dedicated channel internally. load may reset mixer state on some platforms, stopping all currently-playing channels.
Crossfade with Two Sounds
Use two Sound objects (loaded from OGG / WAV) on separate Channels. Fade one out while fading other in — full control, no music-load disruption.
Preload All Music
If you do use mixer.music, preload all tracks at startup so live loads don’t interrupt. Trade-off: memory.
Buffer Size Tuning
Smaller mixer buffer at pre_init reduces but doesn’t eliminate the issue. Test on lowest-end target hardware.
Verifying
Music swaps don’t cut SFX. UI sounds, footsteps, weapon fire all complete cleanly during transitions.
“music.load can disrupt channels. Use two Sounds for crossfade instead.”
For dynamic soundtracks, ditch mixer.music entirely — multi-Sound architecture gives you crossfades, layering, and stem-style control.