web-dev-qa-db-fra.com

Pygame, les sons ne jouent pas

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

17
Gabriele Cirulli

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.

0
Alex Martelli

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)
15
Trilarion

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()
8
nio

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)
6
nmin

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.

3
Roberto Carrillo

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.

3
VagosLabrou

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"
1
RufusVS
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.

1
Gobinda Sinha

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

abslute_path est évidemment remplacé par votre chemin absolu actuel;)

bonne chance.

0
jaya

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.

0
gregsleg

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

0
Haimei

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()
0
Mathias Karlsson
import pygame

pygame.init()
sound = pygame.mixer.Sound("desert_rustle.wav")
pygame.mixer.Sound.play(sound)

Cela fonctionnera sur Python 3

0
James Old