如何将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
相关产品推荐
相关产品推荐

