#python #tkinter #audio #pygame
#python #pygame
Вопрос:
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
Выводится сообщение «Процесс завершен с кодом выхода 0», но он ничего не воспроизводит. Как я могу решить эту проблему?
Комментарии:
1. вы пробовали pygame.mixer.music.play(циклы =-1)???
2. да, я пытаюсь менять циклы, устанавливать громкость, переключать каналы. Программа запущена, но звука нет
3.
while pygame.mixer.music.get_busy(): pygame.time.Clock().tick(10)
что-то вроде этого решает мою проблему. я не знаю почему, но музыка занята.4. Из pygame.org/docs/ref/music.html «Имейте в виду, что поддержка MP3 ограничена. […] Рассмотрите возможность использования OGG вместо этого «.
5. да, но это произошло, когда я попытался воспроизвести звук
pygame.mixer.Sound(filename) Sound.play
Ответ №1:
Функция воспроизведения запускает воспроизведение музыки, но немедленно возвращается. Затем ваша программа достигает своего конца, и объект pygame автоматически уничтожается, что приводит к остановке музыки.
Как вы прокомментировали, он воспроизводит музыку, если вы подождете ее перед выходом — потому что тогда объект pygame не будет уничтожен до завершения цикла while.
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
Ответ №2:
Музыка останавливается, потому что это асинхронное событие, что означает, что оно будет продолжаться в соответствии со сценарием. затем скрипт мгновенно останавливается, не давая музыке возможности запуститься. как указывалось ранее, вы могли бы использовать
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
однако еще лучше pygame.event.wait()
, так как он будет ждать завершения всех асинхронных событий.
Ответ №3:
Вот очень простой способ.
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()
Ответ №4:
Я нашел хорошее решение из thepythongamebook.com:
pygame.mixer.pre_init(44100, -16, 2, 2048) # setup mixer to avoid sound lag
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load('music_01.mp3')
pygame.mixer.music.play(-1)
Ответ №5:
попробуйте это.
import pygame
def pmusic(file):
pygame.init()
pygame.mixer.init()
clock = pygame.time.Clock()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
print("Playing...")
clock.tick(1000)
def stopmusic():
pygame.mixer.music.stop()
def getmixerargs():
pygame.mixer.init()
freq, size, chan = pygame.mixer.get_init()
return freq, size, chan
def initMixer():
BUFFER = 3072 # audio buffer size, number of samples since pygame 1.8.
FREQ, SIZE, CHAN = getmixerargs()
pygame.mixer.init(FREQ, SIZE, CHAN, BUFFER)
try:
initMixer()
file = 'C:\data\03.mp3'
pmusic(file)
except KeyboardInterrupt: # to stop playing, press "ctrl-c"
stopmusic()
print("nPlay Stopped by user")
except Exception:
print("unknown error")
print("Done")
Комментарии:
1. Добро пожаловать в StackOverflow. Ответы, содержащие только код, как правило, помечаются для удаления, поскольку они «низкого качества». Пожалуйста, прочтите раздел справки об ответах на вопросы, а затем рассмотрите возможность добавления некоторых комментариев к вашему ответу.
Ответ №6:
PyGame имеет 2 разных модуля для воспроизведения звука и музыки, модуль pygame.mixer и модуль pygame.mixer.music. Этот модуль содержит классы для загрузки звуковых объектов и управления воспроизведением. Разница объясняется в документации:
Разница между воспроизведением музыки и обычным воспроизведением звука заключается в том, что музыка передается в потоковом режиме и никогда не загружается полностью сразу. Система микширования поддерживает только один музыкальный поток одновременно.
Если вы хотите воспроизвести файл mp3, вам необходимо инициализировать модуль. Загрузите файл с pygame.mixer.music.load
помощью . Вызовите pygame.mixer.music.play()
, чтобы начать воспроизведение музыкального потока. Наконец, вам нужно дождаться воспроизведения файла.
Используется pygame.mixer.music.get_busy()
для проверки микширования звука. Запрашивайте состояние микшера непрерывно в цикле.
В цикле вам нужно отложить время на либо pygame.time.delay
или pygame.time.Clock.tick
. Кроме того, вам необходимо обрабатывать события в цикле приложения. Смотрите pygame.event.get()
соответственно pygame.event.pump()
:
Для каждого кадра вашей игры вам нужно будет выполнить какой-то вызов очереди событий. Это гарантирует, что ваша программа может внутренне взаимодействовать с остальной частью операционной системы.
import pygame
pygame.init()
pygame.mixer.music.load('my_music.mp3')
pygame.mixer.music.play()
clock = pygame.time.Clock()
while pygame.mixer.music.get_busy():
clock.tick(60)
pygame.event.poll()
Ответ №7:
Кажется, звук не воспроизводится из-за того, как вы его импортировали. Приведенный ниже код воспроизводит звук, как и ожидалось. Здесь ничего не изменилось, кроме того, что вместо того, что import pygame
он использует from pygame import mixer
. Это может быть связано с тем, что Pygame — это пакет, но я не уверен.
from pygame import mixer
file = 'some.mp3'
mixer.init()
mixer.music.load(file)
mixer.music.play()