2010-05-29 20 views
13

Estoy tratando de reproducir archivos de sonido (.wav) con pygame, pero cuando lo comienzo nunca escucho nada.
Este es el código:Pygame, sonidos no juegan

import pygame 

pygame.init() 
pygame.mixer.init() 
sounda= pygame.mixer.Sound("desert_rustle.wav") 

sounda.play() 

También probé usando canales, pero el resultado es el mismo

Respuesta

0

Su código juega desert_rustle.wav bastante bien en mi máquina (Mac OS X 10.5, Python 2.6.4, 1.9 PyGame .1). ¿Qué versiones de SO, Python y Python estás usando? ¿Puedes escuchar el .wav OK por otros medios (por ejemplo, open en una terminal de Mac o start en una consola de Windows seguido del nombre de archivo/ruta al archivo .wav) para garantizar que el archivo no esté dañado? Es difícil depurar su problema específico (que no es con el código que proporciona) sin poder reproducirlo y sin tener todos estos detalles cruciales.

3

Tuve el mismo problema en Windows 7. En mi caso, no estaba ejecutando el código como administrador. No me preguntes por qué, pero al abrir una línea de comando como administrador lo solucionó por mí.

+0

Lo intenté y no funcionó. Aún así creo que es un problema de Windows. –

6

sounda.play() devuelve un objeto que es necesario para reproducir el sonido. Con él también se puede averiguar si el sonido sigue jugando:

channela = sounda.play() 
while channela.get_busy(): 
    pygame.time.delay(100) 
0

sólo tratar de volver a guardar el archivo wav para asegurarse de que su información de frecuencia. O bien, puede grabar un sonido para asegurarse de que su frecuencia, los bits, el tamaño y canales (utilizo este método para resolver este problema)

3

Lo que hay que hacer es algo como esto:.

import pygame 
import time 

pygame.init() 
pygame.mixer.init() 
sounda= pygame.mixer.Sound("desert_rustle.wav") 

sounda.play() 
time.sleep (20) 

El La razón por la que le dije al programa que duerma es porque quería una forma de seguir funcionando sin escribir mucho código. Tuve el mismo problema y el sonido no se reprodujo porque el programa se cerró inmediatamente después de intentar reproducir la música.

En caso de que desee que el programa realmente haga algo, simplemente escriba todo el código necesario, pero asegúrese de que dure el tiempo suficiente para que el sonido se reproduzca completamente.

5

que no tenía sonido de jugar mixer.Sound, pero Comenzó a trabajar después de haber creado la ventana, este es un ejemplo mínimo, basta con cambiar el nombre del archivo, ejecutar y pulse la tecla ARRIBA para jugar:

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

Para mí (en Windows 7, Python 2.7, PyGame 1.9) De hecho, tengo que eliminar la llamada pygame.init() para que funcione o si pygame.init() se queda para crear al menos una pantalla en pygame.

Mi ejemplo:

import time, sys 
from pygame import mixer 

# pygame.init() 
mixer.init() 

sound = mixer.Sound(sys.argv[1]) 
sound.play() 

time.sleep(5) 
+0

El 'time.sleep (5)' fue la solución (como respondió VagosLabrou). – erik

+0

Wow, dejando que pygame.init() lo resolviera por mí. ¡Increíble! –

1

creo que lo que necesita es 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

sólo trato:

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" 

Esto debería funcionar. Solo necesita agregar print "" y el sonido tendrá tuvo tiempo para cargarse.

0

He tenido algo como esto suceda. Tal vez tienes el mismo problema? Trate de usar una ruta absoluta:

import pygame 

pygame.init() 
pygame.mixer.init() 
sounda= pygame.mixer.Sound("/absolute_path/desert_rustle.wav") 

sounda.play() 

Dónde abslute_path es, obviamente, substituir por su ruta absoluta real;)

buena suerte.

0
import pygame 

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

Esto funcionará en Python 3

1

5 años finales de respuesta, pero espero que pueda ayudar a alguien .. :-)

En primer lugar, usted no necesita el "pygame.init()" -línea. En segundo lugar, haz un loop y reproduce el sonido dentro de eso, o de lo contrario comenzará pygame.mixer, y pararás de jugar de nuevo inmediatamente.

Tengo este código para que funcione bien en mi Raspberry pi con Raspbian OS. Tenga en cuenta que utilicé un ciclo while que continúa girando el forvers de sonido.

import pygame.mixer 

pygame.mixer.init() 
sounda = pygame.mixer.Sound("desert_rustle.wav") 

while True: 
    sounda.play()