用Python打造专属录音机:从零开始实现语音录制

用Python打造专属录音机:从零开始实现语音录制

编码文章call10242025-02-21 12:18:2911A+A-

最近在折腾一些有趣的Python项目时,我发现实现一个简单的录音功能竟然如此方便。今天,就让我们一起探索如何用Python打造一个专属的录音机。你是否也想过,在需要的时候,快速录制一段语音备忘,或者为你的程序添加一些声音交互?接下来,我会一步步带你实现这个小目标。

准备工作:安装必要的库

在开始编写代码之前,我们需要安装两个关键的Python库:sounddevicescipy。这两个库分别负责音频的录制和wav文件的读写。你可以使用以下命令进行安装:

pip install sounddevice
pip install scipy

sounddevice库提供了与音频设备交互的功能,而scipy库则提供了强大的科学计算能力,其中包括处理音频文件的模块。安装完成后,我们就可以开始编写代码了。

核心代码:实现音频录制

以下是实现音频录制的核心代码。我们将首先导入所需的库,然后设置一些必要的参数,如采样率(sample rate)。

import sounddevice as sd
from scipy.io.wavfile import write

# 设置采样率,采样率越高,音质越好,文件越大
fs = 44100

# 提示用户输入录制时长
second = int(input("请输入录音时长(秒):"))
print("开始录音....\n")

# 使用sounddevice进行录音
#  sd.rec() 函数接受录音时长,采样率和声道数等参数
record_voice = sd.rec(int(second * fs), samplerate=fs, channels=2)
# 等待录音完成
sd.wait()

# 将录音保存为wav文件
write("MyRecording.wav", fs, record_voice)
print("录音完成,文件已保存,请查看文件夹")

在这段代码中,我们首先导入了sounddevicescipy.io.wavfile库。然后,我们定义了采样率 fs 为 44100 Hz,这是一个常用的音频采样率。接下来,我们提示用户输入录音时长,并将用户输入的时间乘以采样率,以便计算录音所需的样本数量。

sounddevice.rec()函数是录音的核心,它接受录音的样本数、采样率和声道数作为参数,返回一个包含录音数据的NumPy数组。sounddevice.wait()函数则用于等待录音完成。最后,我们使用scipy.io.wavfile.write()函数将录音数据保存为wav文件。

代码详解

  • 采样率 (fs):采样率指的是每秒钟从模拟信号中提取样本的数量。常见的采样率有 44100Hz (CD 音质) 和 48000Hz (DVD 音质)。更高的采样率意味着更高的音质,但同时也会导致更大的音频文件。
  • 录音时长 (second):用户可以通过终端输入需要录制的时间长度,这个时间长度决定了录音的持续时间。
  • sd.rec() 函数:这个函数负责启动录音过程,接受以下几个关键参数:int(second * fs): 录音的总采样点数,通过录音时长(秒)乘以采样率(Hz)计算得到。samplerate=fs: 采样率,决定了音频信号的数字化精度。channels=2: 声道数,2 表示立体声。
  • sd.wait() 函数:这个函数会暂停程序执行,直到录音过程完成。
  • write() 函数:这个函数负责将录音数据写入 WAV 文件,接受以下参数:"MyRecording.wav": 输出文件名,可根据需要修改。fs: 采样率,必须与录音时的采样率一致。record_voice: 从sd.rec()函数返回的录音数据。

运行代码

将上述代码保存为 .py 文件,例如 recorder.py,然后在终端中运行:

python recorder.py

程序会提示你输入录音时长,输入后程序将开始录音。录音完成后,你会在当前目录下看到一个名为 MyRecording.wav 的文件,这就是你刚刚录制的音频。

实战案例:构建一个语音备忘录

我们可以将上述代码扩展成一个简单的语音备忘录工具。例如,可以添加一个循环,让用户可以多次录音,或者使用GUI界面,让用户界面更加友好。

import sounddevice as sd
from scipy.io.wavfile import write
import os

fs = 44100

while True:
    choice = input("是否开始录音?(y/n): ")
    if choice.lower() != 'y':
        break

    second = int(input("请输入录音时长(秒):"))
    print("开始录音....\n")

    record_voice = sd.rec(int(second * fs), samplerate=fs, channels=2)
    sd.wait()

    filename = input("请输入文件名(不包含扩展名):")
    filename = f"{filename}.wav"
    write(filename, fs, record_voice)
    print("录音完成,文件已保存,请查看文件夹")

print("程序结束。")

这段代码在原有的基础上增加了一个循环,允许用户连续多次录音。同时,还允许用户自定义保存的文件名,提升了程序的实用性。

总结

通过本文的讲解,我们成功地使用Python实现了音频录制功能,并且能够将音频保存为wav文件。我们了解了sounddevicescipy库在音频处理中的作用,以及如何设置录音参数。我们还通过一个实战案例,演示了如何将录音功能应用到实际项目中。

希望通过本文,你能够对Python的音频处理能力有更深入的了解。现在,你可以尝试用这段代码录制你的声音,或者将它添加到你自己的项目中。如果你有任何问题,或者想分享你的想法,欢迎在评论区留言。让我们一起探索更多有趣的Python应用!

思考题

  1. 如何更改代码以实现单声道录音?
  2. 尝试录制一段较长时间的音频,观察录音文件的大小与录音时长的关系。
  3. 如何将录音功能集成到GUI界面,让用户操作更加方便?
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4