Глава 20 · Разработка игр с Pygame

Звуковые эффекты и музыка

Короткие эффекты и фоновая музыка в Pygame — два разных инструмента с разной внутренней механикой воспроизведения.

За звук в Pygame отвечает отдельный подмодуль pygame.mixer. У него, как и у остального Pygame, есть собственная обязательная инициализация — обычно она уже включена в общий pygame.init(), но при проблемах со звуком стоит убедиться в этом явно через pygame.mixer.init().

Короткие звуки и музыка — не одно и то же

У Pygame два разных инструмента для звука, и они не взаимозаменяемы:

pygame.mixer.Soundpygame.mixer.music
Для чегоКороткие эффекты: прыжок, выстрел, монетаФоновая музыка
ЗагрузкаПолностью в память сразуПроигрывается потоково, не грузится целиком
Одновременных звуковНесколько сразу, на разных каналахОдин поток музыки за раз
Типичный вызовsound.play()pygame.mixer.music.play(loops=-1)
zvuk_i_muzyka.py
zvuk_pryzhka = pygame.mixer.Sound("assets/sounds/prygok.wav")

pygame.mixer.music.load("assets/sounds/fon.mp3")
pygame.mixer.music.play(loops=-1)   # -1 значит "зациклить бесконечно"

# внутри игрового цикла, в момент прыжка:
zvuk_pryzhka.play()
Звук загружается каждый кадр — заметные подтормаживания
pygame.mixer.Sound(...) читает файл с диска — это заметно медленнее, чем воспроизвести уже загруженный звук. Все звуки нужно загружать один раз, до начала игрового цикла (как и изображения из раздела 20.19), и хранить в переменных или словаре, а внутри цикла — только вызывать .play() у уже загруженного объекта. Загрузка ассета внутри цикла — одна из самых частых причин необъяснимых просадок кадров в первых проектах на Pygame.
Практика: звуковые эффекты и фоновая музыка
Pygame открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →