comment jouer un fichier wav en python?
J'ai essayé pygame pour la lecture de wav fichier comme ceci:
import pygame
pygame.init()
pygame.mixer.music.load("mysound.wav")
pygame.mixer.music.play()
pygame.event.wait()
mais Il modifier la voix et je ne sais pas pourquoi!
J'ai lu ce lien solutions et ne peut pas résoudre mon problème avec la lecture des fichiers wave!
pour cette solution, je ne sais pas que dois-je importer?
s = Sound()
s.read('sound.wav')
s.play()
et pour cette solution de /dev/dsp ne marche pas exister dans la nouvelle version de linux :
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
et quand j'ai essayé pyglet me donne cette erreur:
import pyglet
music = pyglet.resource.media('mysound.wav')
music.play()
pyglet.app.run()
--------------------------
nima@ca005 Desktop]$ python play.py
Traceback (most recent call last):
File "play.py", line 4, in <module>
music = pyglet.resource.media('mysound.wav')
File "/usr/lib/python2.7/site-packages/pyglet/resource.py", line 587, in media
return media.load(path, streaming=streaming)
File "/usr/lib/python2.7/site-packages/pyglet/media/__init__.py", line 1386, in load
source = _source_class(filename, file)
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py", line 194, in __init__
format = wave_form.get_format_chunk()
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py", line 174, in get_format_chunk
for chunk in self.get_chunks():
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py", line 110, in get_chunks
chunk = cls(self.file, name, length, offset)
File "/usr/lib/python2.7/site-packages/pyglet/media/riff.py", line 155, in __init__
raise RIFFFormatException('Size of format chunk is incorrect.')
pyglet.media.riff.RIFFFormatException: Size of format chunk is incorrect.
AL lib: ReleaseALC: 1 device not closed
que voulez-vous dire par "changer de voix" ?
C'changer un homme de son à un enfant de son (désolé mon anglais n'est pas très bon et je ne trouve pas le mot juste pour mon problème)
Tu veux dire, ça sonne plus aigu qu'il ne le devrait ?
oui Il a plus aigus
C'changer un homme de son à un enfant de son (désolé mon anglais n'est pas très bon et je ne trouve pas le mot juste pour mon problème)
Tu veux dire, ça sonne plus aigu qu'il ne le devrait ?
oui Il a plus aigus
OriginalL'auteur nim4n | 2013-07-15
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser PyAudio. Un exemple ici sur mon Linux il fonctionne:
Un seul add-on: le changement de
while data != '':
àwhile len(data) > 0:
résolu un problème où cela tout entre dans une boucle infinie. Ce problème se produit uniquement après une mise à jour de python 3.4 3.5 avec pyaudio 0.2.9 Source: PyAudio de DocumentationOriginalL'auteur zhangyangyu
La raison pygame changements de votre audio est une table de mixage par défaut une 22k taux d'échantillonnage:
Votre wav est probablement 8k. Alors, quand pygame en joue, il joue à peu près deux fois plus vite. Afin de préciser votre wav fréquence dans l'init.
Pyglet a quelques problèmes correctement la lecture de RIFF en-têtes. Si vous avez une base de fichier wav (avec exactement les 16 octets de l'esf bloc) avec aucune autre information dans l'esf morceau (comme le "fait" de données), il fonctionne. Mais il ne prévoit pas, pour des données supplémentaires dans les morceaux, donc, c'est vraiment n'adhérant pas à l'RIFF spécification de l'interface.
OriginalL'auteur Gene