我不理解pyaudio的示例材料.看来他们已经编写了一个完整的小程序,它让我失望了.我如何只播放一个音频文件?格式不是问题,我只想知道播放音频文件所需的最小代码.
可能是他们的例子中的这个小包装器(警告:在膝盖上创建)将帮助您理解他们编写的代码的含义.
import pyaudio import wave import sys class AudioFile: chunk = 1024 def __init__(self, file): """ Init audio stream """ self.wf = wave.open(file, 'rb') self.p = pyaudio.PyAudio() self.stream = self.p.open( format = self.p.get_format_from_width(self.wf.getsampwidth()), channels = self.wf.getnchannels(), rate = self.wf.getframerate(), output = True ) def play(self): """ Play entire file """ data = self.wf.readframes(self.chunk) while data != '': self.stream.write(data) data = self.wf.readframes(self.chunk) def close(self): """ Graceful shutdown """ self.stream.close() self.p.terminate() # Usage example for pyaudio a = AudioFile("1.wav") a.play() a.close()
这个例子对我来说非常清楚.您只需将示例保存为playwav.py调用:
python playwav.py my_fav_wav.wav
波浪示例带有一些额外的评论:
import pyaudio import wave import sys # length of data to read. chunk = 1024 # validation. If a wave file hasn't been specified, exit. if len(sys.argv) < 2: print "Plays a wave file.\n\n" +\ "Usage: %s filename.wav" % sys.argv[0] sys.exit(-1) ''' ************************************************************************ This is the start of the "minimum needed to read a wave" ************************************************************************ ''' # open the file for reading. wf = wave.open(sys.argv[1], 'rb') # create an audio object p = pyaudio.PyAudio() # open stream based on the wave object which has been input. stream = p.open(format = p.get_format_from_width(wf.getsampwidth()), channels = wf.getnchannels(), rate = wf.getframerate(), output = True) # read data (based on the chunk size) data = wf.readframes(chunk) # play stream (looping from beginning of file to the end) while data != '': # writing to the stream is what *actually* plays the sound. stream.write(data) data = wf.readframes(chunk) # cleanup stuff. stream.close() p.terminate()