- 安装pyaudio库
在Python中使用Pyaudio库来录制音频,首先需要安装该库,可以使用pip工具来安装,命令如下所示:
pip install pyaudio
- 创建Pyaudio对象
在使用Pyaudio进行录音之前,需要创建PyAudio对象,并指定参数。代码如下所示:
import pyaudio
# 创建PyAudio对象
p = pyaudio.PyAudio()
# 设置参数
CHUNK = 1024 # 缓冲区大小
FORMAT = pyaudio.paInt16 # 音频格式
CHANNELS = 1 # 声道数
RATE = 44100 # 采样率
# 打开流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
- 录音
在流(stream)打开的情况下,我们可以通过调用read()方法来读取从输入设备得到的原始音频数据并存储,代码如下所示:
# 录音时间
RECORD_SECONDS = 5
# 存储录音数据
frames = []
# 录音
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
# 关闭流
stream.stop_stream()
stream.close()
p.terminate()
- 存储音频数据
通过上面的代码,我们可以得到录音的音频数据,接下来,我们可以将这些音频数据存储到本地文件中,代码如下所示:
import wave
import os
# 存储路径
output_path = 'output/'
# 确保输出路径存在
if not os.path.exists(output_path):
os.makedirs(output_path)
# 设置输出文件名
output_filename = 'output.wav'
# 打开输出文件
wf = wave.open(output_path + output_filename, 'wb')
# 设置参数
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
# 写入数据
wf.writeframes(b''.join(frames))
# 关闭文件
wf.close()
print('录音完成')
至此,我们的录音过程就完成了,音频数据已经存储到了本地文件中。下面是一个完整的代码示例:
import pyaudio
import wave
import os
# 存储路径
output_path = 'output/'
# 确保输出路径存在
if not os.path.exists(output_path):
os.makedirs(output_path)
# 创建PyAudio对象
p = pyaudio.PyAudio()
# 设置参数
CHUNK = 1024 # 缓冲区大小
FORMAT = pyaudio.paInt16 # 音频格式
CHANNELS = 1 # 声道数
RATE = 44100 # 采样率
# 设置录音时间
RECORD_SECONDS = 5
# 设置输出文件名
output_filename = 'output.wav'
# 打开流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
# 存储录音数据
frames = []
# 录音
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
# 关闭流
stream.stop_stream()
stream.close()
p.terminate()
# 打开输出文件
wf = wave.open(output_path + output_filename, 'wb')
# 设置参数
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
# 写入数据
wf.writeframes(b''.join(frames))
# 关闭文件
wf.close()
print('录音完成')
示例2:
import pyaudio
import wave
import os
def record_audio(output_path, output_filename, time=5):
# 创建PyAudio对象
p = pyaudio.PyAudio()
# 设置参数
CHUNK = 1024 # 缓冲区大小
FORMAT = pyaudio.paInt16 # 音频格式
CHANNELS = 1 # 声道数
RATE = 44100 # 采样率
# 打开流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
# 存储录音数据
frames = []
# 录音
for i in range(0, int(RATE / CHUNK * time)):
data = stream.read(CHUNK)
frames.append(data)
# 关闭流
stream.stop_stream()
stream.close()
p.terminate()
# 打开输出文件
wf = wave.open(output_path + output_filename, 'wb')
# 设置参数
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
# 写入数据
wf.writeframes(b''.join(frames))
# 关闭文件
wf.close()
print('录音完成')
if __name__ == '__main__':
# 存储路径
output_path = 'output/'
# 确保输出路径存在
if not os.path.exists(output_path):
os.makedirs(output_path)
# 设置输出文件名
output_filename = 'output.wav'
# 录音时间
time = 10
# 开始录音
record_audio(output_path, output_filename, time)
以上为两个不同示例,均使用了Pyaudio库来实现音频录制。其中,示例1将全部代码放在一个文件中,示例2将代码封装到了一个函数中,并且将输出路径、输出文件名以及录音时间等参数作为函数的参数,在使用时可根据实际情况进行配置。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python pyaudio音频录制的实现 - Python技术站