Как я могу играть в mp3 с Pygame? - PullRequest
21 голосов
/ 13 октября 2011
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()

Выводит «Процесс завершен с кодом выхода 0», но ничего не воспроизводится.Как я могу решить эту проблему?

Ответы [ 7 ]

19 голосов
/ 07 декабря 2011

Функция воспроизведения запускает воспроизведение музыки, но сразу возвращается. Затем ваша программа достигает конца, и объект pygame автоматически уничтожается, что приводит к остановке музыки.

Как вы прокомментировали, он воспроизводит музыку, если вы подождете ее перед выходом - потому что тогда объект pygame не будет уничтожен, пока не закончится цикл while.

while pygame.mixer.music.get_busy(): 
    pygame.time.Clock().tick(10)
13 голосов
/ 23 марта 2013

Музыка останавливается, потому что это асинхронное событие, что означает, что оно будет продолжаться со сценарием.затем сценарий мгновенно останавливается, не давая музыке возможности запуститься.как указывалось ранее, вы можете использовать

while pygame.mixer.music.get_busy(): 
  pygame.time.Clock().tick(10)

, однако, еще лучше будет pygame.event.wait(), поскольку он будет ожидать завершения всех асинхронных событий.

6 голосов
/ 11 марта 2018

Вот супер простой способ.

import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()
3 голосов
/ 24 февраля 2016

Я нашел хорошее решение от 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)
2 голосов
/ 12 марта 2015

Попробуйте это,

#!/usr/bin/env python
import pygame
from Tkinter import *
file = 'Your MP3 here'
root = Tk()
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
root.mainloop()

вам нужно будет установить Tkinter, однако, надеюсь, он будет работать, и вам не нужно будет устанавливать время вручную. Если это сработало, пожалуйста, дайте мне знать, я проверил это на своем компьютере, но иногда все просто не работает. Я постараюсь помочь вам, если смогу.

1 голос
/ 06 марта 2018

попробуйте это.

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")
0 голосов
/ 14 февраля 2018

Кажется, что звук не воспроизводится из-за того, как вы его импортировали.Код ниже воспроизводит звук, как и ожидалось.Здесь ничего не изменилось, за исключением того, что вместо import pygame используется from pygame import mixer.Это может быть связано с тем, что Pygame является пакетом, но я не уверен.

from pygame import mixer

file = 'some.mp3'
mixer.init()
mixer.music.load(file)
mixer.music.play()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...