sounddevice库中rec()函数的使用方法及示例解析
sounddevice库中的rec()函数用于录制音频并保存为WAV文件。具体的使用方法如下:
sounddevice.rec(frames, samplerate=44100, channels=1, dtype='int16', out=None, mapping=None, blocking=False, callback=None, **kwargs)
参数说明:
- frames:录制的总帧数。设置为None表示一直录制,直到调用stop()函数停止录制。
- samplerate:采样率,表示每秒采样数(默认为44100)。
- channels:声道数(默认为1)。
- dtype:数据类型(默认为'int16',即16位整数)。
- out:指定一个可写入的对象作为输出,可以是文件对象或类似文件对象的对象。
- mapping:通道映射,表示输入声道到输出声道的映射。
- blocking:设置为True表示阻塞式录制,即直到录制完成才返回;设置为False表示非阻塞式录制,将在开始录制后立即返回(默认为False)。
- callback:录制时的回调函数,每当一个新的缓冲区准备好后,该函数将被调用。
下面是一个使用rec()函数录制音频的示例:
import sounddevice as sd
import numpy as np
# 定义回调函数
def callback(indata, frames, time, status):
if status:
print(status)
# 将音频数据保存到全局变量中
global audio_data
audio_data.append(indata.copy())
# 录制2秒音频
duration = 2 # 录制时长(秒)
samplerate = 44100 # 采样率
frames = int(duration * samplerate) # 总帧数
audio_data = [] # 存储音频数据的列表
# 开始录制
sd.rec(frames=frames, samplerate=samplerate, channels=1, callback=callback)
# 等待录制完成
sd.wait()
# 将音频数据转换为2维数组
audio_data = np.concatenate(audio_data, axis=0)
# 保存音频为WAV文件
sd.write('output.wav', audio_data, samplerate)
上述代码先定义了一个回调函数callback,当每个新的缓冲区准备好后,该函数将被调用。在回调函数中,将音频数据保存到全局变量audio_data中。
然后,通过调用rec()函数开始录制音频,设置录制的时长为2秒,采样率为44100,声道数为1,并将回调函数传入。
接着,调用sd.wait()函数等待录制完成。
最后,将音频数据转换为2维数组,并使用write()函数将音频保存为WAV文件。
总结:rec()函数用于录制音频并保存为WAV文件,可以设置录制的时长、采样率、声道数等参数,并通过回调函数获取录制的音频数据。
