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.