- pygame.mixer
-
модуль pygame для загрузки и воспроизведения звуков
Этот модуль содержит классы для загрузки объектов Sound и управления воспроизведением. Модуль mixer является необязательным и зависит от SDL_mixer. Ваша программа должна проверить, что
pygame.mixerдоступен и инициализирован перед его использованием.Модуль mixer имеет ограниченное количество каналов для воспроизведения звуков. Обычно программы сообщают pygame о начале воспроизведения аудио, и он автоматически выбирает доступный канал. По умолчанию используется 8 одновременных каналов, но сложные программы могут получить более точный контроль над количеством каналов и их использованием.
Все воспроизведение звука смешивается в фоновых потоках. Когда вы начинаете воспроизводить объект Sound, он вернётся немедленно, а звук продолжит воспроизведение. Один объект Sound также может быть активно воспроизведён несколько раз.
Mixer также имеет специальный канал потоковой передачи. Он предназначен для воспроизведения музыки и доступен через
pygame.mixer.musicмодуль. Рассмотрите возможность использования этого модуля для воспроизведения длительной музыки. В отличие от модуля mixer, модуль music потоково передает музыку из файлов, не загружая всю музыку сразу в память.Модуль mixer должен быть инициализирован, как и другие модули pygame, но у него есть дополнительные условия. Функция
pygame.mixer.init()принимает несколько необязательных аргументов для управления скоростью воспроизведения и размером выборки. Pygame использует разумные значения по умолчанию, но pygame не может выполнять пересэмплирование звука, поэтому mixer должен быть инициализирован в соответствии со значениями ваших аудиоресурсов.NOTE: для уменьшения задержки при воспроизведении звука используйте меньший размер буфера. По умолчанию он настроен для уменьшения вероятности появления хрипов звука на некоторых компьютерах. Вы можете изменить буфер по умолчанию, вызвавpygame.mixer.pre_init()передpygame.mixer.init()или вызовомpygame.init(). Например:pygame.mixer.pre_init(44100,-16,2, 1024)- pygame.mixer.init()
-
инициализация модуля mixerinit(frequency=44100, size=-16, channels=2, buffer=512, devicename=None, allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None
Инициализирует модуль mixer для загрузки и воспроизведения звука. Значения аргументов по умолчанию могут быть изменены для предоставления конкретных параметров смешивания аудио. Принимаются аргументы по ключевому слову. Для обратной совместимости значения аргументов 0 заменяются значениями по умолчанию при запуске, за исключением
allowedchanges, где используется -1. (Значения по умолчанию при запуске могут быть изменены вызовомpre_init()).Аргумент size представляет количество бит, используемых для каждого аудиосэмпла. Если значение отрицательное, используются знаковые значения сэмплов. Положительные значения означают, что будут использоваться беззнаковые аудиосэмплы. Недопустимое значение вызывает исключение.
Аргумент channels используется для указания использования моно или стерео. 1 для моно и 2 для стерео.
Аргумент buffer управляет количеством внутренних сэмплов, используемых в миксере звука. Значение по умолчанию должно подойти для большинства случаев. Его можно уменьшить, чтобы уменьшить задержку, но может произойти пропуск звука. Его можно увеличить для обеспечения того, что воспроизведение никогда не пропускает звук, но это наложит задержку на воспроизведение звука. Размер буфера должен быть степенью двойки (если нет, он округляется до ближайшей большей степени двойки).
Некоторые платформы требуют, чтобы модуль
pygame.mixerбыл инициализирован после инициализации модулей отображения. Основнойpygame.init()автоматически позаботится об этом, но не сможет передавать любые аргументы в mixer init. Для решения этой проблемы, mixer имеет функциюpygame.mixer.pre_init()для установки надлежащих значений по умолчанию перед использованием верхнего уровня init.При использовании allowedchanges=0 он будет преобразовывать сэмплы во время выполнения, чтобы соответствовать тому, что поддерживает оборудование. Например, звуковая карта может не поддерживать 16-битные звуковые сэмплы, поэтому вместо этого она будет использовать 8-битные сэмплы внутри. Если указано AUDIO_ALLOW_FORMAT_CHANGE, запрашиваемый формат будет изменён на ближайший поддерживаемый SDL2.
Помимо 0, allowedchanged принимает следующие константы, объединённые с помощью ORed:
AUDIO_ALLOW_FREQUENCY_CHANGE
AUDIO_ALLOW_FORMAT_CHANGE
AUDIO_ALLOW_CHANNELS_CHANGE
AUDIO_ALLOW_ANY_CHANGE
Безопасно вызывать это более одного раза, но после инициализации mixer вы не можете изменить аргументы воспроизведения, не вызвав сначала
pygame.mixer.quit().Изменено в pygame 1.8: Значение по умолчанию
buffersizeизменилось с 1024 на 3072.Изменено в pygame 1.9.1: Значение по умолчанию
buffersizeизменилось с 3072 на 4096.Изменено в pygame 2.0.0: Значение по умолчанию
buffersizeизменилось с 4096 на 512.Изменено в pygame 2.0.0: Значение по умолчанию
frequencyизменилось с 22050 на 44100.Изменено в pygame 2.0.0:
sizeможет быть 32 (32-битные числа с плавающей точкой).Изменено в pygame 2.0.0:
channelsтакже может быть 4 или 6.Добавлена в pygame 2.0.0:
allowedchanges,devicenameдобавлены как аргументы
- pygame.mixer.pre_init()
-
установка значений аргументов для mixer initpre_init(frequency=44100, size=-16, channels=2, buffer=512, devicename=None, allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None
Вызов pre_init для изменения значений по умолчанию, используемых при вызове реального
pygame.mixer.init(). Принимаются аргументы по ключевому слову. Лучший способ установить пользовательские значения воспроизведения mixer - вызватьpygame.mixer.pre_init()перед вызовом верхнего уровняpygame.init(). Для обратной совместимости значения аргументов 0 заменяются значениями по умолчанию при запуске, за исключениемallowedchanges, где используется -1.Изменено в pygame 1.8: Значение по умолчанию
buffersizeизменилось с 1024 на 3072.Изменено в pygame 1.9.1: Значение по умолчанию
buffersizeизменилось с 3072 на 4096.Изменено в pygame 2.0.0: Значение по умолчанию
buffersizeизменилось с 4096 на 512.Изменено в pygame 2.0.0: Значение по умолчанию
frequencyизменилось с 22050 на 44100.Добавлена в pygame 2.0.0:
allowedchanges,devicenameдобавлены как аргументы
- pygame.mixer.quit()
-
деинициализация mixerquit() -> None
Это деинициализирует
pygame.mixer. Все воспроизведение прекратится, и любые загруженные объекты Sound могут быть несовместимы с mixer, если он будет повторно инициализирован позднее.
- pygame.mixer.get_init()
-
проверка, инициализирован ли mixerget_init() -> (frequency, format, channels)
Если mixer инициализирован, возвращает используемые аргументы воспроизведения. Если mixer не был инициализирован, возвращает
None.
- pygame.mixer.stop()
-
остановка воспроизведения всех звуковых каналовstop() -> None
Это остановит все воспроизведение всех активных каналов mixer.
- pygame.mixer.pause()
-
временная остановка воспроизведения всех звуковых каналовpause() -> None
Это временно остановит всё воспроизведение на активных каналах mixer. Воспроизведение может быть возобновлено позже с помощью
pygame.mixer.unpause()
- pygame.mixer.unpause()
-
возобновление приостановленного воспроизведения звуковых каналовunpause() -> None
Это возобновит все активные звуковые каналы после их приостановки.
- pygame.mixer.fadeout()
-
выключение громкости всех звуков перед остановкойfadeout(time) -> None
Это выведет громкость на всех активных каналах в течение времени, указанного в миллисекундах. После того, как звук будет выведен, воспроизведение остановится.
- pygame.mixer.set_num_channels()
-
установка общего числа каналов воспроизведенияset_num_channels(count) -> None
Устанавливает количество доступных каналов для mixer. Значение по умолчанию равно 8. Значение можно увеличить или уменьшить. Если значение уменьшается, воспроизведение на усечённых каналах останавливается.
- pygame.mixer.get_num_channels()
-
получить общее количество каналов воспроизведенияget_num_channels() -> count
Возвращает количество активных каналов воспроизведения.
- pygame.mixer.set_reserved()
-
зарезервировать каналы от автоматического использованияset_reserved(count) -> count
Микшер может зарезервировать любое количество каналов, которые не будут автоматически выбираться для воспроизведения звуками. Это означает, что каждый раз, когда вы воспроизводите звук без указания канала, зарезервированный канал никогда не будет использоваться. Если звуки в настоящее время воспроизводятся на зарезервированных каналах, они не будут остановлены.
Это позволяет приложению зарезервировать определенное количество каналов для важных звуков, которые не должны быть потеряны или иметь гарантированный канал для воспроизведения.
Возвращает фактическое количество зарезервированных каналов, это может быть меньше запрошенного в зависимости от количества ранее выделенных каналов.
- pygame.mixer.find_channel()
-
найти свободный каналfind_channel(force=False) -> Channel
Это найдёт и вернёт объект неактивного канала. Если неактивных каналов нет, эта функция вернёт
None. Если неактивных каналов нет и аргумент force равенTrue, это найдёт канал с самым долгим звуком и вернёт его.
- pygame.mixer.get_busy()
-
проверить, смешивается ли какой-либо звукget_busy() -> bool
Возвращает
Trueесли микшер занят смешиванием каналов. Если микшер простаивает, то возвращаетFalse.
- pygame.mixer.get_sdl_mixer_version()
-
получить версию SDL микшераget_sdl_mixer_version() -> (major, minor, patch)get_sdl_mixer_version(linked=True) -> (major, minor, patch)
- Параметры
-
linked (bool) -- если
True(по умолчанию) возвращается связанный номер версии, в противном случае возвращается собранный номер версии - Возвращает
-
номер версии библиотеки SDL микшера (связанный или собранный, в зависимости от
linkedпараметра) в виде кортежа из 3 целых чисел(major, minor, patch) - Тип возвращаемого значения
-
кортеж
Примечание
Связанные и собранные номера версий должны быть одинаковыми.
Введено в pygame 2.0.0.
- pygame.mixer.Sound
-
Создать новый объект Sound из файла или объекта буфераSound(filename) -> SoundSound(file=filename) -> SoundSound(file=pathlib_path) -> SoundSound(buffer) -> SoundSound(buffer=buffer) -> SoundSound(object) -> SoundSound(file=object) -> SoundSound(array=object) -> Sound
Загрузить новый буфер звука из имени файла, объекта файла Python или объекта буфера для чтения. Ограниченное пересэмплирование будет выполнено, чтобы помочь образцу соответствовать аргументам инициализации для микшера. Строка Unicode может быть только путем к файлу. Объект типа bytes может быть либо путем к файлу, либо объектом буфера. Используйте ключевые слова 'file' или 'buffer', чтобы избежать неоднозначности; в противном случае Sound может ошибиться. Если используется ключевое слово 'array', объект должен экспортировать новый интерфейс буфера (сначала проверяется наличие интерфейса буфера у объекта).
Объект Sound представляет фактические данные образца звука. Методы, которые изменяют состояние объекта Sound, будут влиять на все экземпляры воспроизведения звука. Объект Sound также экспортирует новый интерфейс буфера.
Звук может быть загружен из аудиофайла
OGGили из несжатогоWAV.Примечание: буфер будет скопирован внутри, данные не будут совместно использоваться между ним и объектом Sound.
На данный момент поддержка буфера и массива согласуется с
sndarray.make_soundдля массивов Numeric, в том, что знак образца и порядок байтов игнорируются. Это изменится, либо путем правильной обработки знака и порядка байтов, либо путем вывода исключения при их различиях. Кроме того, исходные образцы усекаются, чтобы соответствовать размеру образца аудио.Введено в pygame 1.8:
pygame.mixer.Sound(buffer)Введено в pygame 1.9.2:
pygame.mixer.Soundключевые аргументы и поддержка интерфейса массиваВведено в pygame 2.0.1: поддержка pathlib.Path на Python 3.
- play()
-
начало воспроизведения звукаplay(loops=0, maxtime=0, fade_ms=0) -> Channel
Начать воспроизведение звука (т.е., через динамики компьютера) на доступном канале. Это принудительно выберет канал, поэтому воспроизведение может прервать текущий воспроизводимый звук, если это необходимо.
Аргумент loops управляет тем, сколько раз образец будет повторяться после первого воспроизведения. Значение 5 означает, что звук будет воспроизведён один раз, затем будет повторено пять раз, и в итоге воспроизведётся шесть раз. Значение по умолчанию (ноль) означает, что звук не повторяется, а воспроизводится только один раз. Если loops установлен на -1, звук будет воспроизводиться бесконечно (хотя вы по-прежнему можете вызвать
stop()чтобы его остановить).Аргумент maxtime можно использовать для остановки воспроизведения через заданное количество миллисекунд.
Аргумент fade_ms сделает так, чтобы звук начинался с 0 громкости и плавно нарастал до полной громкости за заданное время. Образец может закончиться до завершения плавного увеличения громкости.
Возвращает объект канала для выбранного канала.
- stop()
-
остановить воспроизведение звукаstop() -> None
Это остановит воспроизведение этого звука на любых активных каналах.
- fadeout()
-
остановить воспроизведение звука после плавного уменьшения громкостиfadeout(time) -> None
Это остановит воспроизведение звука после плавного уменьшения громкости за время, указанное в аргументе в миллисекундах. Звук будет уменьшаться и останавливаться на всех активно воспроизводящихся каналах.
- set_volume()
-
установить громкость воспроизведения для этого звукаset_volume(value) -> None
Это установит громкость (громкость) для этого звука. Это немедленно повлияет на звук, если он воспроизводится. Это также повлияет на любое последующее воспроизведение этого звука.
- Параметры
-
value (float) --
громкость в диапазоне от 0.0 до 1.0 (включительно)
Если value < 0.0, громкость не будет измененаЕсли value > 1.0, громкость будет установлена в 1.0
- get_volume()
-
получить громкость воспроизведенияget_volume() -> value
Возвращает значение от 0.0 до 1.0, представляющее громкость для этого звука.
- get_num_channels()
-
подсчитать сколько раз этот звук воспроизводитсяget_num_channels() -> count
Возвращает количество активных каналов, на которых воспроизводится этот звук.
- get_length()
-
получить длительность звукаget_length() -> seconds
Возвращает длительность этого звука в секундах.
- get_raw()
-
возвращает копию образцов звука в виде строкового объекта типа bytes.get_raw() -> bytes
Возвращает копию буфера объекта Sound в виде объекта типа bytes.
Введено в pygame 1.9.2.
- pygame.mixer.Channel
-
Создать объект Channel для управления воспроизведениемChannel(id) -> Channel
Возвращает объект Channel для одного из текущих каналов. ID должен быть значением от 0 до значения
pygame.mixer.get_num_channels().Объект Channel может использоваться для точного управления воспроизведением звуков. Канал может воспроизводить только один звук одновременно. Использование каналов полностью необязательно, так как pygame может управлять ими по умолчанию.
- play()
-
Воспроизвести звук на конкретном каналеplay(Sound, loops=0, maxtime=0, fade_ms=0) -> None
Начинает воспроизведение звука на конкретном канале. Если на канале уже воспроизводится другой звук, он будет остановлен.
Аргумент loops имеет такое же значение, как и в
Sound.play(): это количество повторов звука после первого воспроизведения. Если он равен 3, звук будет воспроизведён 4 раза (в первый раз, а затем ещё три). Если loops равен -1, воспроизведение будет повторяться бесконечно.Как и в
Sound.play(), аргумент maxtime можно использовать для остановки воспроизведения звука после заданного количества миллисекунд.Как и в
Sound.play(), аргумент fade_ms можно использовать для плавного запуска звука.
- stop()
-
Остановить воспроизведение на каналеstop() -> None
Останавливает воспроизведение звука на канале. После остановки воспроизведения канал становится доступным для воспроизведения новых звуков.
- pause()
-
Временно остановить воспроизведение каналаpause() -> None
Временно останавливает воспроизведение звука на канале. Возобновить его можно позже с помощью
Channel.unpause()
- unpause()
-
Возобновить воспроизведение приостановленного каналаunpause() -> None
Возобновляет воспроизведение на приостановленном канале.
- fadeout()
-
Остановить воспроизведение после плавного вывода каналаfadeout(time) -> None
Остановить воспроизведение канала после плавного вывода звука за указанное время в миллисекундах.
- set_volume()
-
Установить громкость воспроизводимого каналаset_volume(value) -> Noneset_volume(left, right) -> None
Установить громкость (громкость) воспроизводимого звука. При запуске канала его значение громкости сбрасывается. Это влияет только на текущий звук. Значение аргумента находится в диапазоне от 0,0 до 1,0.
Если передано одно значение, оно будет громкостью для обоих динамиков. Если передано два значения, и микшер в стерео режиме, первое значение будет громкостью левого динамика, а второе — правого. (Если второе значение
None, первое значение будет громкостью обоих динамиков.)Если на канале воспроизводится звук, для которого также был вызван
set_volume(), оба вызова учитываются. Например:sound = pygame.mixer.Sound("s.wav") channel = s.play() # Sound plays at full volume by default sound.set_volume(0.9) # Now plays at 90% of full volume. sound.set_volume(0.6) # Now plays at 60% (previous value replaced). channel.set_volume(0.5) # Now plays at 30% (0.6 * 0.5).
- get_volume()
-
Получить громкость воспроизводимого каналаget_volume() -> value
Возвращает громкость канала для текущего воспроизводимого звука. Это не учитывает стерео разделение, используемое функцией
Channel.set_volume(). Объект Sound также имеет свою громкость, которая смешивается с каналом.
- get_busy()
-
Проверить активность каналаget_busy() -> bool
Возвращает
True, если канал активно обрабатывает звук. Если канал не активен, возвращаетFalse.
- get_sound()
-
Получить текущий воспроизводимый звукget_sound() -> Sound
Возвращает фактический объект Sound, который в данный момент воспроизводится на этом канале. Если канал не активен, возвращается
None.
- queue()
-
Поместить объект Sound в очередь для последующего воспроизведенияqueue(Sound) -> None
Когда объект Sound помещен в очередь на канале, он начнет воспроизводиться сразу после завершения текущего звука. Каждый канал может содержать только один звук в очереди. Воспроизводимый звук из очереди будет воспроизведён, только если текущее воспроизведение завершится автоматически. Он очищается при любом другом вызове
Channel.stop()илиChannel.play().Если на канале нет активного звука, то звук из очереди начнёт воспроизводиться сразу.
- get_queue()
-
Возвращает любой звук, находящийся в очередиget_queue() -> Sound
Если на канале уже находится звук в очереди, он будет возвращён. После начала воспроизведения звука из очереди он больше не будет находиться в очереди.
- set_endevent()
-
Сгенерировать событие при остановке воспроизведения на каналеset_endevent() -> Noneset_endevent(type) -> None
Когда для канала задано событие завершения, оно будет отправлять событие в очередь pygame каждый раз, когда звук на этом канале заканчивает воспроизведение (не только в первый раз). Используйте
pygame.event.get()для получения события завершения, после его отправки.Обратите внимание, что если вы вызываете
Sound.play(n)илиChannel.play(sound,n), событие завершения отправляется только один раз: после того, как звук был воспроизведён «n+1» раз (см. документацию Sound.play).Если
Channel.stop()илиChannel.play()вызваны, когда звук всё ещё воспроизводится, событие будет размещено немедленно.Аргумент type будет идентификатором события, отправляемого в очередь. Это может быть любой допустимый тип события, но хорошим выбором будет значение в диапазоне от
pygame.locals.USEREVENTдоpygame.locals.NUMEVENTS. Если аргумент type не указан, то канал перестанет отправлять события завершения.
- get_endevent()
-
Получить событие, отправляемое каналом при остановке воспроизведенияget_endevent() -> type
Возвращает тип события, которое отправляется каждый раз, когда канал завершает воспроизведение звука. Если событие завершения отсутствует, функция возвращает
pygame.NOEVENT.
Редактировать на GitHub
© Pygame Developers.
Licensed under the GNU LGPL License version 2.1.
https://www.pygame.org/docs/ref/mixer.html