1. 搭建端到端ASR最小可运行系统

搭建端到端ASR最小可运行系统 学习卡片

任务目标

读取一个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")

运行方式

  1. 安装依赖:pip install numpy matplotlib scipy
  2. 准备一个WAV文件(如 test.wav),放在与脚本相同的目录下
  3. 运行脚本:python analyze_wav.py

验证方法

  • 控制台输出的采样率应与WAV文件属性一致(可用系统播放器或 ffprobe 核对)
  • 时长 = 采样点数 / 采样率,可自行验算确认
  • 生成的 waveform.png 应显示一条连续波形,横轴范围与输出时长一致,纵轴幅度在合理范围内(如16位PCM为 -32768 到 32767)

常见问题

  • 若文件不是PCM格式(如IEEE float),wavfile.read 仍可读取,但数据类型会不同,不影响波形绘制
  • 多声道文件默认只取第一声道绘制,如需查看所有声道可自行修改代码
  • 若文件路径错误,会抛出 FileNotFoundError,请检查路径
WAV文件读取与波形可视化流程 WAV文件 test.wav wavfile.read() 采样率 + 数据数组 基本信息提取 采样率 (Hz) 采样点数 时长 = 点数/采样率 plt.plot() 时域波形图 输出结果 采样率: 16000 Hz 采样点数: 160000 时长: 10.000 秒 waveform.png