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

在Python中如何利用sounddevicerec()函数实现实时音频录制

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

要在Python中使用sounddevice库的rec()函数进行实时音频录制,你需要首先安装sounddevice库。可以使用pip命令来安装sounddevice库:

pip install sounddevice

接下来,你可以使用以下代码来实现实时音频录制:

import sounddevice as sd

def callback(indata, frames, time, status):
    # 将录制到的音频数据保存到文件或进行其他处理
    pass

def main():
    duration = 5  # 录制时长(以秒为单位)
    sample_rate = 44100  # 采样率

    # 打开音频输入设备,设置采样率和回调函数
    with sd.InputStream(samplerate=sample_rate, channels=1, callback=callback):
        print("开始录制...")
        
        # 录制指定时长的音频
        sd.sleep(int(duration * 1000))

        print("录制结束")

if __name__ == "__main__":
    main()

在上面的代码中,我们首先定义了一个名为callback的回调函数。这个函数会在每一次录制的时候被调用,传递给它的参数包括录制到的音频数据(indata)、音频帧数(frames)、时间戳(time)和状态(status)。你可以在这个回调函数中将录制到的音频数据保存到文件或进行其他处理。

然后,在main函数中,我们设定了录制的时长(以秒为单位)和采样率。然后,我们使用sd.InputStream函数创建一个音频输入流,设定了采样率和回调函数。在这个函数中,我们打印一条开始录制的消息,然后通过调用sd.sleep函数进行录制指定时长的音频。最后,我们打印一条录制结束的消息。

你可以根据自己的需求修改该代码,例如改变录制时长、采样率、通道数等。还可以在回调函数中添加自定义的音频处理逻辑。

下面是一个完整的例子,以实时录制的方式将音频保存到WAV文件中:

import sounddevice as sd
import numpy as np
import scipy.io.wavfile as wav

filename = "output.wav"  # 输出文件名
duration = 5  # 录制时长(以秒为单位)
sample_rate = 44100  # 采样率

def callback(indata, frames, time, status):
    # 保存录制到的音频数据到文件
    wav.write(filename, sample_rate, np.array(indata[:, 0]))

def main():
    # 打开音频输入设备,设置采样率和回调函数
    with sd.InputStream(samplerate=sample_rate, channels=1, callback=callback):
        print("开始录制...")
        
        # 录制指定时长的音频
        sd.sleep(int(duration * 1000))

        print("录制结束")

if __name__ == "__main__":
    main()

在这个例子中,我们首先导入了scipy.io.wavfile模块用于保存音频数据到WAV文件。

然后,在回调函数中,我们使用wav.write函数将录制到的音频数据保存到文件中。由于sounddevice库返回的音频数据是一个二维数组,我们通过indata[:, 0]来获取左声道的音频数据,并将其转换为一维数组。

最后,在main函数中,我们设定了输出文件名、录制时长和采样率。然后,我们使用sd.InputStream函数创建一个音频输入流,设定了采样率和回调函数。在这个函数中,我们打印一条开始录制的消息,然后通过调用sd.sleep函数进行录制指定时长的音频。最后,我们打印一条录制结束的消息。

你可以根据自己的需求修改该代码,例如改变输出文件名、录制时长、采样率等。