PyAudio是Python下的一个音频处理模块,用于将音频流输送到计算机声卡上。理论上,该模块能够播放任何解码器解码而成的有效音频帧。
安装PyAudio
使用pip工具来安装PyAudio:
pip3 install pyaudio
不同系统的安装过程有所不同:
Windows下与Django、Flask等纯Python模块无异,不需编译非Python语言的源码。
但在Linux下,还须编译用C/C++编写的底层音频库,这点类似于Node.js下那些拥有C++模块、要用gyp单独编译的软件包。
需要PortAudio开发包的支持。
CSDN实践
笔者根据CSDN上的这篇笔记实践使用PyAudio模块播放音频。作者 @一个处女座的程序猿 所演示的格式为WAV,使用Python自带的Wave文件处理模块wave进行解码。但是,他的笔记写的不够完善,为此笔者特地对代码进行了修正,并加了更多注释。
为了更细致地探究相关模块运行时所产生的数据,笔者还将解码时所产生的帧内容转换成文本,记录在文件当中。
最终笔者修改而成的代码如下:
# 引入模块
from pyaudio import *
import wave
def play():
# 用文本文件记录wave模块解码每一帧所产生的内容。注意这里不是保存为二进制文件
dump_buff_file=open(r"Ring01.dup", 'w')
chunk=1 # 指定WAV文件的大小
wf=wave.open(r"Ring01.wav",'rb') # 打开WAV文件
p=PyAudio() # 初始化PyAudio模块
# 打开一个数据流对象,解码而成的帧将直接通过它播放出来,我们就能听到声音啦
stream=p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True)
data = wf.readframes(chunk) # 读取第一帧数据
print(data) # 以文本形式打印出第一帧数据,实际上是转义之后的十六进制字符串
# 播放音频,并使用whi