📜  使用Python创建录音机

📅  最后修改于: 2022-05-13 01:54:24.036000             🧑  作者: Mango

使用Python创建录音机

Python可用于执行各种任务。其中之一是创建录音机。我们可以使用 python 的sounddevice模块来录制和播放音频。该模块与wavioscipy模块一起提供了保存录制音频的方法。

安装

  • sounddevice:该模块提供播放和录制包含音频信号的 NumPy 数组的功能。让我们 通过运行以下命令安装它:
$ pip3 install sounddevice
  • 我们可以使用wavioscipy将录制的音频保存为文件格式我们将在这里看到他们两个。
  • 要安装wavio:
$ pip3 install wavio
  • 要安装scipy
$ pip3 install scipy

现在,我们完成了所需模块的安装。所以,让我们编写代码。

入门

首先,导入所需的库。

# import required libraries
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv

现在,在启动记录器之前,我们必须声明一些变量。第一个是音频的采样频率(在大多数情况下,这将是每秒 44100 或 48000 帧),第二个是录制持续时间。我们必须以秒为单位指定持续时间,以便在该持续时间之后停止录制。

所以,让我们也宣布它们。

# Sampling frequency
freq = 44100

# Recording duration
duration = 5

现在,我们准备启动记录器。它将创建一个记录音频的 NumPy 数组。

# Start recorder with the given values of 
# duration and sample frequency
recording = sd.rec(int(duration * freq), 
                   samplerate=freq, channels=2)

# Record audio for the given number of seconds
sd.wait()

现在,我们完成了录制音频。所以,让我们保存它。要保存音频文件,我们可以使用scipy模块或wavio模块。让我们一一介绍。

使用 Scipy:

我们将使用 scipy.io.wavfile 中的 write函数将 NumPy 数组转换为音频文件。

# This will convert the NumPy array to an audio
# file with the given sampling frequency
write("recording0.wav", freq, recording)

使用 wavio:

我们还可以使用wavio库中的 write函数。

# Convert the NumPy array to audio file
wv.write("recording1.wav", recording, freq, sampwidth=2)

完整代码:

Python3
# import required libraries
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv
  
# Sampling frequency
freq = 44100
  
# Recording duration
duration = 5
  
# Start recorder with the given values 
# of duration and sample frequency
recording = sd.rec(int(duration * freq), 
                   samplerate=freq, channels=2)
  
# Record audio for the given number of seconds
sd.wait()
  
# This will convert the NumPy array to an audio
# file with the given sampling frequency
write("recording0.wav", freq, recording)
  
# Convert the NumPy array to audio file
wv.write("recording1.wav", recording, freq, sampwidth=2)