使用librosa绘图时调整坐标轴字号及解决音频时长显示不全问题
问题1:音频仅显示1.5秒的修复方案
该问题核心原因是提取MFCC特征时没有传入实际使用的16000Hz采样率参数,librosa默认按22050Hz的采样率计算时间轴:2秒16000Hz采样的音频总共有32000个采样点,按22050Hz换算时长仅约1.45秒,刚好匹配你看到的1.5秒显示结果。
同时可以显式指定x轴范围固定为0-2秒,避免共享x轴时出现异常截断。
问题2:坐标轴字号调整方案
你当前设置的全局字号为1过小,可直接调整全局字号参数,也可以单独给每个子图的坐标轴刻度设置独立字号,适配布局需求。
修改后可用的完整代码如下:
import matplotlib.pyplot as plt import librosa import librosa.display import glob # 修正原代码多余缩进 path = glob.glob('E:/Python_On_All_Dataset/Four emotion_for plot/*.wav') # 全局字号按需调整数值即可 plt.rcParams['font.size'] = 10 # 可调整画布大小避免内容拥挤 fig, ax = plt.subplots(nrows=7, ncols=3, sharex=True, figsize=(15, 12)) for i in range(7): # 显式指定加载2秒音频,避免部分音频长度不一致 y, sr = librosa.load(path[i], sr=16000, duration=2) # 绘制波形图,旧版本librosa可将waveshow改回waveplot librosa.display.waveshow(y, sr=sr, ax=ax[i, 0]) # 单独调整当前子图坐标轴刻度字号 ax[i,0].tick_params(axis='both', labelsize=8) # 提取MFCC时传入实际采样率参数,修正时间轴计算错误 mfcc = librosa.feature.mfcc(y=y, sr=sr) librosa.display.specshow(mfcc, x_axis='time', ax=ax[i, 1], cmap='viridis') ax[i,1].tick_params(axis='both', labelsize=8) # 提取梅尔频谱 S = librosa.feature.melspectrogram(y=y, sr=sr) librosa.display.specshow(librosa.power_to_db(S), x_axis='time', y_axis='log', ax=ax[i, 2], cmap='viridis') ax[i,2].tick_params(axis='both', labelsize=8) # 统一锁定x轴范围为0-2秒,确保显示完整 ax[i,0].set_xlim(0, 2) # 自动调整子图间距避免内容重叠 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者KRISHNA CHAUHAN
相关产品推荐
相关产品推荐

