Как я могу играть в mp3 с pygame?

import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()

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

Ответ 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

Я нашел хорошее решение от 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)

Ответ 4

Вот очень простой способ.

import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()

Ответ 5

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

#!/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, однако он, надеюсь, будет работать, и вам не нужно вручную устанавливать время. Если это сработало, сообщите мне, я проверил это на своем компьютере, но иногда вещи просто не работают. Я постараюсь помочь вам, если смогу.

Ответ 6

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

from pygame import mixer

file = 'some.mp3'
mixer.init()
mixer.music.load(file)
mixer.music.play()

Ответ 7

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

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")