本章主要介绍一部分与人工智能相关得编程实例,如车牌识别、人脸识别、语音识别和图文识别等,这些内容涉及人工智能。
本节编程实例实现的功能是”播放音频文件“。
14.1.1 准备工作
本节编程实例涉及录音、播放和生成wav文件等功能,所以要用pyaudio库实现音频操作的主要功能。pyaudio库是一个跨平台的音频 I/O库,在命令行终端通过pip命令安装该音频库,如下所示。
pip install pyaudio |
本节编程实例还需要以发送URL请求的方式调用百度语音识别相关的接口,这里用requests库实现该功能,主要因为requests库是Python的HTTP库,简单易用,安装命令如下所示。
pip install requests |
14.1.2 音频编程基础
音频编程需要了解采样率、量化位数和声道数等概念。
采样率:录制音频时录音设备在1秒钟内对声音信号的采样次数,采样频率越高,声音还原得就越真实自然,它用于赫兹(Hz)来表示。
量化位数:表示音频每个采样用几字节表示,比如1字节是8bit,2字节是16bit。
声道数:表示声音录制时的音频数量或回放时相应的扬声器数量。
这个编程实例采用pyaudio库,本节将介绍用pyaudio库进行音频编程的二个要点,分别为音频播放与录制。
播放音频文件的代码如下所示。
# 导入音频相关模板
import pyaudio
import wave
# 音频播放函数
def play_wave():
# 通过 wave 对象打开一个音频文件
# test.wav 是一个测试文件,可以是任意的wav格式文件
wf = wave.open("test.wav",'rb')
# 建立一个Pyaudio对象
p=pyaudio.PyAudio()
# 打开一个数据流对象,设置参数 output=True,
# 可以使解码形式的音频直接通过 stream 播放出来,这样就可以听到声音
stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),rate=wf.getframerate(),output=True)
# 播放音频,使用 while 循环连续读取音频帧并播放
while True:
oneframe=wf.readframes(1024)
if oneframe ==b'':
break
stream.write(oneframe)
stream.close()
p.terminate()
print('播放结束')
# 调用播放函数
play_wave()
(1)代码开头导入pyaudio库模块,因为程序需要使用该库的 PyAudio 对象进行相关操作。在play_wave()函数中利用 PyAudio 对象生成一个音频数据流对象,并设置这个数据流对象参数output=True,实现了音频播放功能。这里对音频数据流参数进行简单说明,参数output用来指定数据流模式是录音还是播音,当设置参数 output=True 可用于音频播放,设置参数 input=True时可用于录音;参数format用来设置音频的量化位数; channels 用来设置声道数; rate用来设置音频的采样率;这些参数可以从打开的 wave 文件中取得,如 stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),rate=wf.getframerate(),output=True) 语句中分别从文件取得音频的量化位数、声道数和音频采样率。
(2)代码导入wave 模块