1. 音频文件读取与波形可视化
任务目标
读取一个WAV格式音频文件,提取其采样率、采样点数与时长等基本信息,并绘制时域波形图,直观观察音频信号的幅度变化。
环境依赖
需要 numpy、matplotlib 和 scipy(或标准库 wave)。以下实现使用 scipy.io.wavfile 读取WAV文件,代码简洁且无需手动处理字节序。
完整实现
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
def analyze_wav(file_path):
# 读取WAV文件
sample_rate, data = wavfile.read(file_path)
# 处理单声道/多声道:若为多声道,取第一个声道用于可视化
if data.ndim > 1:
data = data[:, 0]
# 基本信息
duration = len(data) / sample_rate
print(f"采样率: {sample_rate} Hz")
print(f"采样点数: {len(data)}")
print(f"时长: {duration:.3f} 秒")
print(f"数据类型: {data.dtype}")
# 时域波形图
time = np.arange(len(data)) / sample_rate
plt.figure(figsize=(12, 4))
plt.plot(time, data, linewidth=0.5)
plt.xlabel("时间 (s)")
plt.ylabel("幅度")
plt.title("时域波形图")
plt.grid(True)
plt.tight_layout()
plt.savefig("waveform.png", dpi=150)
plt.show()
return sample_rate, data
if __name__ == "__main__":
# 使用示例:请将 test.wav 替换为实际文件路径
analyze_wav("test.wav")
运行方式
- 安装依赖:
pip install numpy matplotlib scipy - 准备一个WAV文件(如
test.wav),放在与脚本相同的目录下 - 运行脚本:
python analyze_wav.py
验证方法
- 控制台输出的采样率应与WAV文件属性一致(可用系统播放器或
ffprobe核对) - 时长 = 采样点数 / 采样率,可自行验算确认
- 生成的
waveform.png应显示一条连续波形,横轴范围与输出时长一致,纵轴幅度在合理范围内(如16位PCM为 -32768 到 32767)
常见问题
- 若文件不是PCM格式(如IEEE float),
wavfile.read仍可读取,但数据类型会不同,不影响波形绘制 - 多声道文件默认只取第一声道绘制,如需查看所有声道可自行修改代码
- 若文件路径错误,会抛出
FileNotFoundError,请检查路径