You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将wav文件转为128x128频谱图制作猫狗音频分类数据集

适配代码实现方案

首先明确梅尔频谱图尺寸的控制逻辑:

  • 频谱高度(梅尔频带数)由librosa.feature.melspectrogram的n_mels参数控制,设置为128即可固定高度为128
  • 频谱宽度(时间帧数)由采样率、音频时长、帧移参数hop_length共同决定,我们可以通过固定参数+尺寸插值的方式,确保所有输出都是128×128,无需丢弃样本

完整适配代码

import librosa
import numpy as np
from skimage.transform import resize

D = []
# 固定全局参数
sr_target = 22050
duration_target = 2.97
n_mels = 128
time_steps = 128

# 处理猫类音频(标签1)
for x in range(40):
    y, sr = librosa.load(f'C:/audio files/folderCat/{x}.wav', sr=sr_target, duration=duration_target)
    # 生成梅尔频谱,固定高度为128
    ps = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels)
    # 统一调整时间轴尺寸到128,线性插值保证特征平滑
    ps = resize(ps, (n_mels, time_steps), mode='constant', anti_aliasing=True)
    D.append((ps, 1))

# 处理狗类音频(标签2)
for x in range(40):
    y, sr = librosa.load(f'C:/audio files/folderDog/{x}.wav', sr=sr_target, duration=duration_target)
    ps = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels)
    ps = resize(ps, (n_mels, time_steps), mode='constant', anti_aliasing=True)
    D.append((ps, 2))

可选优化说明

如果不想用插值调整,也可以直接通过计算帧移参数实现精准尺寸:2.97秒音频在22050采样率下总采样数约为65488,要得到128个时间帧,设置hop_length=516加入melspectrogram参数中即可,生成的频谱尺寸基本刚好为128×128。
如果是做音频分类任务,建议添加ps = librosa.power_to_db(ps)将功率谱转为dB域,特征适配性更好。

内容的提问来源于stack exchange,提问作者user12862298

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:42:02