1
2
3
4
5
6
7
8
9
10
11
12
13
14
import wave
import pyaudio

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()

参考链接:python播放WAVE文件

python 将一个整数变成2个字节的字符

创建于2023.2.15/19.38,修改于2023.2.26/15.55