检查音频是否有异常停顿、频带缺失或明显背景声,可以先画梅尔频谱图。图上的时间与频率坐标必须来自实际采样率和 hop_length;漂亮的热力图不代表声音内容已经识别正确。
先固定音频读入规则
本文按 librosa 0.11 接口编写,安装 librosa、matplotlib、soundfile 和 numpy,准备获授权的 speech.wav。示例转单声道并保留采样率,未在真实业务音频上评估识别或降噪效果。

python -m pip install "librosa==0.11.0" matplotlib soundfile numpy
计算功率梅尔谱并画图
import numpy as np
import librosa
import librosa.display
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
y, sr = librosa.load("speech.wav", sr=None, mono=True)
if len(y) == 0 or np.max(np.abs(y)) < 1e-8:
raise ValueError("音频为空或近乎全静音,请先核对")
hop = 256
n_fft = 1024
mel = librosa.feature.melspectrogram(
y=y, sr=sr, n_fft=n_fft, hop_length=hop,
n_mels=64, fmin=0, fmax=sr/2, power=2.0,
)
db = librosa.power_to_db(mel, ref=np.max)
fig, ax = plt.subplots(figsize=(9, 4))
img = librosa.display.specshow(
db, sr=sr, hop_length=hop, x_axis="time", y_axis="mel",
fmin=0, fmax=sr/2, ax=ax,
)
fig.colorbar(img, ax=ax, format="%+2.0f dB")
ax.set_title("Mel power spectrogram")
fig.tight_layout()
fig.savefig("mel_spectrogram.png", dpi=160)
plt.close(fig)
print("采样率", sr, "时长", len(y)/sr, "谱矩阵", mel.shape)
保存为 plot_mel.py,运行 python plot_mel.py。Agg 后端直接保存图片,在没有桌面窗口的环境也可运行。梅尔频带是感知尺度,纵轴各段不按普通线性频率等距排列。
核对时间与频率
验证时检查横轴终点与打印的录音时长大致对应,矩阵第一维应为 64 个梅尔频带,再把明显静音或声音突变的时间点与原录音对照。帧中心和补边会使边界略有差异,不要求最后一列恰好等于音频最后一个样本。
采样率为 sr 时,最高可表示频率受 sr/2 限制;这里只是把频谱显示到这个范围,不能凭图判断原录音设备真实带宽。改变 hop_length 后也要同步传给 specshow,否则时间轴会错误。
比较多段音频时注意色标
ref=np.max 让每段音频自身最大功率对应 0 dB,因此不同文件的颜色不能直接比较绝对响度。要比较录音电平,下一步先固定读入、参考功率和色标范围,再核对同一时间段的数值与波形。
频谱不是字幕、说话人标签或音质评分,无法单凭一张图确定噪声来源。若用于训练输入,还要固定梅尔频带数、FFT、hop 和归一化规则;更改配置后不能继续混用旧缓存特征。
资料与适用版本
以下官方资料核对于 2026 年 10 月 1 日;安装和界面以实际使用版本为准。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30710.html