2010-05-29 5 views
13

Sto provando a riprodurre file audio (.wav) con pygame ma quando lo avvio non sento mai nulla.
Questo è il codice:Pygame, i suoni non vengono riprodotti

import pygame 

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

sounda.play() 

Ho anche provato ad utilizzare i canali, ma il risultato è lo stesso

risposta

0

Il codice gioca desert_rustle.wav abbastanza bene sulla mia macchina (Mac OSX 10.5, Python 2.6.4, Pygame 1.9 .1). Quali versioni di OS e Python e Pygame stai usando? Riesci a sentire il .wav OK con altri mezzi (ad esempio open su un terminale Mac o start su una console Windows seguito dal nome file/percorso del file .wav) per garantire che il file non sia danneggiato? È difficile eseguire il debug del problema specifico (che non è con il codice che si dà) senza poterlo riprodurre e senza avere tutti questi dettagli cruciali.

3

Ho avuto lo stesso problema in Windows 7. Nel mio caso non stavo eseguendo il codice come amministratore. Non chiedermi perché, ma aprire una riga di comando come amministratore ha risolto per me.

+0

Provato e non ha funzionato. Comunque penso che sia un problema con Windows. –

6

sounda.play() restituisce un oggetto necessario per riprodurre il suono. Con esso si possono anche scoprire se il suono è ancora in gioco:

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

Basta provare a ri-salvare il file wav per assicurarsi che le sue informazioni di frequenza. Oppure si può registrare un suono per assicurarsi che la sua frequenza, bit, dimensioni e canali (io uso questo metodo per risolvere questo problema)

3

Quello che dovete fare è qualcosa di simile a questo:.

import pygame 
import time 

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

sounda.play() 
time.sleep (20) 

Il La ragione per cui ho detto al programma di dormire è perché volevo un modo per tenerlo in esecuzione senza digitare un sacco di codice. Ho avuto lo stesso problema e il suono non è stato riprodotto perché il programma si è chiuso immediatamente dopo aver provato a riprodurre la musica.

Nel caso in cui si desideri che il programma esegua effettivamente qualcosa, è sufficiente digitare tutto il codice necessario ma assicurarsi che duri abbastanza a lungo affinché il suono possa essere riprodotto completamente.

5

ho avuto nessun suono di giocare mixer.Sound, ma ha cominciato a lavorare dopo ho creato la finestra, questo è un esempio minimo, basta cambiare il nome del file, eseguire e premere UP chiave da svolgere:

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

Per me (su Windows 7, Python 2.7, PyGame 1.9) In realtà devo rimuovere la chiamata a pygame.init() per farlo funzionare o se pygame.init() rimane per creare almeno uno schermo in pygame.

Il mio esempio:

import time, sys 
from pygame import mixer 

# pygame.init() 
mixer.init() 

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

time.sleep(5) 
+0

Il 'time.sleep (5)' era la soluzione (come risposta da VagosLabrou). – erik

+0

Wow, lasciare che pygame.init() lo abbia risolto per me. Incredibile! –

1

Penso che quello che vi serve è 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

Basta provare:

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" 

Questo dovrebbe funzionare. Hai solo bisogno di aggiungere print "" e il suono avrà avuto il tempo di caricarsi.

0

Ho avuto qualcosa di simile accadere. Forse hai lo stesso problema? Prova ad utilizzare un percorso assoluto:

import pygame 

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

sounda.play() 

Dove abslute_path è ovviamente sostituito con il percorso assoluto reale;)

buona fortuna.

0
import pygame 

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

Questo funziona su Python 3

1

5 anni risposta in ritardo, ma spero di poter aiutare qualcuno .. :-)

In primo luogo, non avete bisogno del "pygame.init()" -linea. In secondo luogo, crea un loop e riproduci il suono all'interno, altrimenti pygame.mixer verrà avviato e interromperà immediatamente la riproduzione.

Ho ottenuto questo codice per funzionare correttamente sul mio Raspberry pi con Raspbian OS. Nota che ho usato un ciclo while che continua a loopare il forver del suono.

import pygame.mixer 

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

while True: 
    sounda.play()