I tried pygame for playing wav file like this:
import pygame pygame.init() pygame.mixer.music.load("mysound.wav") pygame.mixer.music.play() pygame.event.wait()
but It change the voice and I don’t know why! I read this link solutions and can’t solve my problem with playing wave file!
for this solution I dont know what should I import?
s = Sound() s.read('sound.wav') s.play()
and for this solution /dev/dsp dosen’t exist in new version of 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()
and when I tried pyglet It give me this error:
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
Advertisement
Answer
You can use PyAudio. An example here on my Linux it works:
#!usr/bin/env python #coding=utf-8 import pyaudio import wave #define stream chunk chunk = 1024 #open a wav format music f = wave.open(r"/usr/share/sounds/alsa/Rear_Center.wav","rb") #instantiate PyAudio p = pyaudio.PyAudio() #open stream stream = p.open(format = p.get_format_from_width(f.getsampwidth()), channels = f.getnchannels(), rate = f.getframerate(), output = True) #read data data = f.readframes(chunk) #play stream while data: stream.write(data) data = f.readframes(chunk) #stop stream stream.stop_stream() stream.close() #close PyAudio p.terminate()