欢迎访问宙启技术站
智能推送

sounddevice库中rec()函数的使用方法及示例解析

发布时间:2023-12-23 08:54:54

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文件,可以设置录制的时长、采样率、声道数等参数,并通过回调函数获取录制的音频数据。