J'essaie de lire des fichiers son (.wav) avec pygame mais quand je le lance, je n'entends jamais rien.
Ceci est le code:
import pygame
pygame.init()
pygame.mixer.init()
sounda= pygame.mixer.Sound("desert_rustle.wav")
sounda.play()
J'ai aussi essayé d'utiliser des canaux mais le résultat est le même
Votre code joue desert_rustle.wav
assez bien sur ma machine (Mac OSX 10.5, Python 2.6.4, pygame 1.9.1). Quels systèmes d'exploitation, versions de Python et Pygame utilisez-vous? Pouvez-vous entendre le .wav
OK par d’autres moyens (par exemple, open
sur un terminal Mac ou start
sur une console Windows suivi du nom de fichier/chemin du fichier .wav
) pour garantir que le fichier n’est pas endommagé? Il est difficile de déboguer votre problème spécifique (qui n’est pas lié au code que vous donnez) sans pouvoir le reproduire et sans avoir tous ces détails cruciaux.
Pour moi (sous Windows 7, Python 2.7, PyGame 1.9), je dois effectivement supprimer l'appel pygame.init () pour que cela fonctionne ou si pygame.init () reste pour créer au moins un écran en pygame.
Mon exemple:
import time, sys
from pygame import mixer
# pygame.init()
mixer.init()
sound = mixer.Sound(sys.argv[1])
sound.play()
time.sleep(5)
Je n'ai entendu aucun son de mixer.Sound, mais il a commencé à fonctionner après la création de la fenêtre , il s'agit d'un exemple minimal. Modifiez simplement votre nom de fichier, exécutez et appuyez sur la touche HAUT pour lire:
WAVFILE = 'tom14.wav'
import pygame
from pygame import *
import sys
mixer.pre_init(frequency=44100, size=-16, channels=2, buffer=4096)
pygame.init()
print pygame.mixer.get_init()
screen=pygame.display.set_mode((400,400),0,32)
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key==K_ESCAPE:
pygame.quit()
sys.exit()
Elif event.key==K_UP:
s = pygame.mixer.Sound(WAVFILE)
ch = s.play()
while ch.get_busy():
pygame.time.delay(100)
pygame.display.update()
sounda.play () renvoie un objet nécessaire à la lecture du son. Avec lui, vous pouvez également savoir si le son est toujours en cours de lecture:
channela = sounda.play()
while channela.get_busy():
pygame.time.delay(100)
J'ai eu le même problème sous Windows 7. Dans mon cas, je n'exécutais pas le code en tant qu'administrateur. Ne me demandez pas pourquoi, mais ouvrir une ligne de commande en tant qu'administrateur a résolu le problème pour moi.
Ce que vous devez faire est quelque chose comme ceci:
import pygame
import time
pygame.init()
pygame.mixer.init()
sounda= pygame.mixer.Sound("desert_rustle.wav")
sounda.play()
time.sleep (20)
La raison pour laquelle j'ai dit au programme de dormir, c'est parce que je cherchais un moyen de le faire fonctionner sans avoir à saisir beaucoup de code. J'ai eu le même problème et le son ne jouait pas parce que le programme a fermé immédiatement après avoir essayé de jouer de la musique.
Si vous voulez que le programme fasse quelque chose, tapez simplement tout le code nécessaire, mais assurez-vous qu'il durera assez longtemps pour que le son soit entièrement reproduit.
Je pense que ce dont vous avez besoin est pygame.mixer.music:
import pygame.mixer
from time import sleep
pygame.mixer.init()
pygame.mixer.music.load(open("\windows\media\chimes.wav","rb"))
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
sleep(1)
print "done"
import pygame, time
pygame.mixer.init()
pygame.init()
sounda= pygame.mixer.Sound("beep.wav")
sounda.play()
pygame.init()
va après mixer.init()
. Cela a fonctionné pour moi.
J'ai eu quelque chose comme ça arriver. Peut-être que vous avez le même problème? Essayez d'utiliser un chemin absolu:
import pygame
pygame.init()
pygame.mixer.init()
sounda= pygame.mixer.Sound("/absolute_path/desert_rustle.wav")
sounda.play()
Où abslute_path est évidemment remplacé par votre chemin absolu actuel;)
bonne chance.
Essayez juste:
import pygame.mixer
from time import sleep
pygame.mixer.init()
pygame.mixer.music.load(open("\windows\media\chimes.wav","rb"))
print ""
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
sleep(1)
print "done"
Cela devrait marcher. Il suffit d’ajouter print ""
et le son aura eu le temps de se charger.
Essayez simplement de ré-enregistrer votre fichier wav pour vous assurer de sa fréquence. Ou vous pouvez enregistrer un son pour s’assurer de sa fréquence, de ses bits, de sa taille et de ses canaux (j’utilise cette méthode pour résoudre ce problème).
5 ans de retard, mais j'espère pouvoir aider quelqu'un .. :-)
Tout d’abord, vous n’avez pas besoin de la ligne "pygame.init ()". Deuxièmement, faites une boucle et reproduisez le son à l'intérieur, sinon pygame.mixer se lancera et cessera immédiatement de jouer.
J'ai obtenu que ce code fonctionne correctement sur mon Raspberry Pi avec Raspbian OS. Notez que j'ai utilisé une boucle while qui continue à boucler le son.
import pygame.mixer
pygame.mixer.init()
sounda = pygame.mixer.Sound("desert_rustle.wav")
while True:
sounda.play()
import pygame
pygame.init()
sound = pygame.mixer.Sound("desert_rustle.wav")
pygame.mixer.Sound.play(sound)
Cela fonctionnera sur Python 3