web-dev-qa-db-fra.com

Comment puis-je jouer un mp3 avec pygame?

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

Cette commande affiche "Processus terminé avec le code de sortie 0", mais ne lit rien. Comment puis-je résoudre ce problème?

18
Ashot

La fonction de lecture commence la lecture de la musique, mais revient immédiatement. Ensuite, votre programme arrive à sa fin et l’objet pygame est automatiquement détruit, ce qui provoque l’arrêt de la musique.

Comme vous l'avez dit, la musique est lue si vous attendez avant de quitter, car l'objet pygame n'est pas détruit jusqu'à la fin de la boucle while.

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

La musique s'arrête parce que c'est un événement asynchrone, ce qui signifie que le script continue. ensuite, le script s’arrête instantanément, ne laissant aucune chance à la musique de commencer ... 

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

cependant, pygame.event.wait() est encore meilleur, car il attendra la fin de tous les événements asynchrones.

11
Cinder

Voici un moyen super facile.

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

J'ai trouvé une bonne solution de 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
Eric Menu

Essaye ça, 

#!/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()

vous devrez installer Tkinter, mais cela fonctionnera, espérons-le, et vous n'aurez pas besoin de régler l'heure manuellement . Si cela a fonctionné, faites-le-moi savoir, je l'ai testé sur mon ordinateur, mais parfois les choses ne fonctionnent pas. . Je vais essayer de vous aider si je peux.

1
DGxInfinitY

essaye celui-là.

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
Alfred George

Il semble que l'audio ne soit pas lu à cause de la façon dont vous l'avez importé. Le code ci-dessous joue le son comme prévu. Rien n'a changé ici si ce n'est qu'au lieu de import pygame, il utilise from pygame import mixer. Cela peut être dû au fait que Pygame est un package, mais je ne suis pas sûr.

from pygame import mixer

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