Quick answer: pygame.mixer.pre_init(44100, -16, 2, 512). Match source files' rate. Init before pygame.init().

Sound effects sound chipmunky or muddy. Mixer initialized at 22050 default; sources are 44100. Resampling artifacts.

The Fix

import pygame
pygame.mixer.pre_init(44100, -16, 2, 512)
pygame.init()

# Match assets at 44100 Hz, 16-bit signed, stereo, 512-sample buffer

pre_init must run before pygame.init or mixer.init. Match frequency to dominant source files; pre-resample others if needed.

Verifying

Audio plays cleanly. Latency low (small buffer). Without match: distortion or pitch shift.

“Match freq. Pre-init. Clean audio.”

Related Issues

For mixer Channel reserved, see Channel. For music end event, see end event.

Match freq. Init early.