一、前言
当需要使用Python处理音频数据时,使用Python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio
工具包。
PyAudio
是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCV
。
1、采集音频
下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav
。使用了tqdm
模块,可以方便显示出来读取过程:
import pyaudio
import wave
from tqdm import tqdm
def record_audio(wave_out_path,record_second):
FORMAT = pyaudio.paInt16#音频数据格式
CHANNELS = 2#声道数
RATE = 44100#采样率
CHUNK = 1024#每次读多少个数据
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
wf = wave.open(wave_out_path, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))#其实就是2,表示两个字节
wf.setframerate(RATE)
print("* recording")
## RATE / CHUNK * record_second意思是:
## 采样率是RATE,每秒采集RATE个数据,所以每秒的音频需要读取RATE / CHUNK次
for i in tqdm(range(0, int(RATE / CHUNK * record_second))):
data = stream.read(CHUNK)
wf.writeframes(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf.close()
record_audio("output.wav",record_second=4)
2、播放音频
下面使用播放的功能来播放1中保存的音频 output.wav
,通过tqdm
,显示播放进度条:
"""PyAudio Example: Play a WAVE file."""
import pyaudio
import wave
from tqdm import tqdm
def play_audio(wave_path):
CHUNK = 1024
wf = wave.open(wave_path, 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
datas = []
while len(data) > 0:
data = wf.readframes(CHUNK)
datas.append(data)
for d in tqdm(datas):
stream.write(d)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
play_audio("output.wav")
三、wave_read相关方法