wf=wave.open('test.wav','rb') p=pyaudio.PyAudio() stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True) chunk=1024 data=wf.readframes(chunk) while data!= '': stream.write(data) data=wf.readframes(chunk)
stream.close() p.terminate()
另外,读取音频文件字节,转换成np数组,并读取数组中的数字播放音频:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import wave import numpy as np import pyaudio import struct
wav=wave.open('test.wav','rb') data=wav.readframes(wav.getnframes()) wav.close() wv=np.frombuffer(data,dtype=np.short) p=pyaudio.PyAudio() stream=p.open(format=p.get_format_from_width(wav.getsampwidth()),channels=wav.getnchannels(),rate=wav.getframerate(),output=True) for i in range(0,wv.size,2*1024): # 跟之前的代码一样,把1024帧当作一个块,因为该音频有两个通道,故一帧数据是2*2个字节,是2个数,所以乘2 ndata=b'' for j in range(i,min(i+1024*2,wv.size)): ndata+=struct.pack('h',wv[j]) # 把数字转成两字节表示 stream.write(ndata) stream.close() p.terminate()