1. 环境搭建与音频采集
任务目标
搭建Python语音开发环境,调用麦克风采集一段音频,将其保存为标准WAV文件,并验证文件可正常读取。
环境依赖
需要Python 3.8+,并安装以下库:
pip install pyaudio numpy
Windows系统若安装PyAudio失败,可先安装对应Python版本的PyAudio‑0.2.11‑cpXX‑cpXX‑win_amd64.whl(从https://github.com/intxcc/pyaudio_portaudio获取),再执行pip install 下载的.whl文件。
实现代码
以下代码完成麦克风录音并保存为WAV文件:
import pyaudio
import wave
import numpy as np
SAMPLE_RATE = 16000 # 采样率 16kHz
CHANNELS = 1 # 单声道
CHUNK = 1024 # 每次读取的帧数
RECORD_SECONDS = 3 # 录音时长
OUTPUT_FILE = "record.wav"
# 初始化 PyAudio
p = pyaudio.PyAudio()
# 打开麦克风输入流
stream = p.open(format=pyaudio.paInt16,
channels=CHANNELS,
rate=SAMPLE_RATE,
input=True,
frames_per_buffer=CHUNK)
print("开始录音...")
frames = []
for _ in range(0, int(SAMPLE_RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("录音结束")
# 停止并关闭流
stream.stop_stream()
stream.close()
p.terminate()
# 将音频数据写入 WAV 文件
with wave.open(OUTPUT_FILE, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(SAMPLE_RATE)
wf.writeframes(b''.join(frames))
print(f"已保存为 {OUTPUT_FILE}")
# 验证:读取文件并检查时长与数据量
with wave.open(OUTPUT_FILE, 'rb') as wf:
n_channels = wf.getnchannels()
samp_width = wf.getsampwidth()
frame_rate = wf.getframerate()
n_frames = wf.getnframes()
duration = n_frames / frame_rate
audio_data = wf.readframes(n_frames)
samples = np.frombuffer(audio_data, dtype=np.int16)
print(f"通道数: {n_channels}")
print(f"采样宽度: {samp_width} 字节")
print(f"采样率: {frame_rate} Hz")
print(f"总帧数: {n_frames}")
print(f"时长: {duration:.2f} 秒")
print(f"有效采样点数: {len(samples)}")
print(f"音频幅值范围: [{samples.min()}, {samples.max()}]")
运行方式
- 将上述代码保存为
record_audio.py。 - 确保麦克风已连接且系统已授权终端/IDE访问麦克风。
- 在终端执行:
python record_audio.py - 程序会提示“开始录音”,请对着麦克风说话或发出声音,3秒后自动结束。
验证方法
运行结束后,检查当前目录下是否生成 record.wav 文件。程序输出的验证信息应满足以下条件即判定通过:
- 通道数为1,采样宽度为2字节,采样率为16000 Hz。
- 时长约为3.00秒(允许±0.1秒误差)。
- 有效采样点数约为48000(16000 × 3)。
- 音频幅值范围不为[0, 0]——若录音时确有声音输入,最小值应小于0或最大值大于0;若完全静音则可能为[0,0],此时需重新录音并确保发声。
也可用任意音频播放器打开 record.wav,应能听到刚才录制的声音。
常见问题
- 麦克风无声音:检查系统麦克风权限是否开启,以及默认录音设备是否正确。
- PyAudio安装失败:Windows用户优先使用预编译whl文件安装;Linux用户可先执行
sudo apt install portaudio19-dev再安装。 - 录音文件时长不对:确认
RECORD_SECONDS值,并检查是否有其他程序占用麦克风导致读取延迟。