Python 实现录音功能

本文将介绍如何使用 Python 实现录音功能。我们将使用 PyAudio 库来捕获和保存音频数据。

1. 安装 PyAudio 库

首先需要安装 PyAudio 库。可以通过 pip 命令来安装:


pip install pyaudio

2. 录音

下面的代码实现了录音功能。它使用 PyAudio 库来捕获音频数据,并将其保存为 WAV 文件。录音时长由 RECORD_SECONDS 变量控制。

import pyaudio
import wave

# 录音时长
RECORD_SECONDS = 5

# 音频数据的采样率
RATE = 16000

# 采样大小(每次读取的音频数据块大小)
CHUNK = 1024

# 录音文件名
WAVE_OUTPUT_FILENAME = "output.wav"

# 创建 PyAudio 对象
audio = pyaudio.PyAudio()

# 打开音频流
stream = audio.open(format=pyaudio.paInt16,
                    channels=1,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

print("* 开始录音...")

# 读取音频数据
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("* 录音结束")

# 关闭音频流
stream.stop_stream()
stream.close()
audio.terminate()

# 保存录音数据到 WAV 文件
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(1)
wf.setsampwidth(audio.get_sample_size(pyaudio.paInt16))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

在上面的代码中,首先创建了一个 PyAudio 对象,并通过它打开了一个音频流。在循环中,我们读取了音频数据,并将其添加到 frames 列表中。循环结束后,我们将音频流关闭,并使用 wave 模块将 frames 列表中的数据保存为 WAV 文件。

3. 播放录音

下面的代码实现了播放录音功能。它使用 wave 模块打开录音文件,并使用 PyAudio 库播放音频数据。

import pyaudio
import wave

# 录音文件名
WAVE_FILENAME = "output.wav"

# 创建 PyAudio 对象
audio = pyaudio.PyAudio()

# 打开 WAV 文件
wf = wave.open(WAVE_FILENAME, 'rb')

# 打开音频流
stream = audio.open(format=audio.get_format_from_width(wf.getsampwidth()),
                    channels=wf.getnchannels(),
                    rate=wf.getframerate(),
                    output=True)

# 播放音频数据
data = wf.readframes(1024)
while data:
    stream.write(data)
    data = wf.readframes(1024)

# 关闭音频流
stream.stop_stream()
stream.close()
audio.terminate()