使用Librosa绘制梅尔频谱图

4

我在使用自定义文件路径创建mel频谱图时,遇到了librosa的问题。

我正在遵循这份文档: https://librosa.github.io/librosa/generated/librosa.feature.melspectrogram.html

我也看了这篇stackoverflow文章: Spectrograms generated using Librosa don't look consistent with Kaldi?

然而,这些都没有帮助我解决我的问题。

import librosa
y, sr = librosa.load("path_to_my_wav_file")
librosa.feature.melspectrogram(y=y, sr=sr)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.power_to_db(y,                                              
ref=np.max), y_axis='mel', fmax=8000, x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Mel spectrogram')
plt.tight_layout()

有人能告诉我如何修复这段代码,以便正确显示并将mel频谱图保存为jpg文件吗?谢谢!

1个回答

14

噢,您的问题主要是关于如何将其保存为jpg文件吗? 如果您只想显示图片,您只需要添加一行代码: plt.show()

如果您想保存为jpg文件,且不带轴和白边:

import os
import matplotlib
matplotlib.use('Agg') # No pictures displayed 
import pylab
import librosa
import librosa.display
import numpy as np

sig, fs = librosa.load('path_to_my_wav_file')   
# make pictures name 
save_path = 'test.jpg'

pylab.axis('off') # no axis
pylab.axes([0., 0., 1., 1.], frameon=False, xticks=[], yticks=[]) # Remove the white edge
S = librosa.feature.melspectrogram(y=sig, sr=fs)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))
pylab.savefig(save_path, bbox_inches=None, pad_inches=0)
pylab.close()

实际上,这个解决方案对于Python3不起作用,因为我无法下载scikit.audiolab。您能否更新您的答案,使其与Python 3兼容? - Sreehari R
我使用scikits.audiolab,因为我认为librosa.load()性能较低。如果您不介意,可以使用它,否则请阅读wav库。它的作用是仅读取wav数据。 - zxf
当我将wavread替换为librosa.load(“wav文件路径”)时,我会收到错误ValueError:没有足够的值来解包(期望3个,得到2个)。 - Sreehari R
应为:sig, fs = librosa.load("path_to_my_wav_file"),而不是:sig, fs, enc = librosa.load('path_to_my_wav_file')。 - zxf
如何修改代码,以生成文件夹中所有文件的频谱图,并将它们保存为.png格式到另一个文件夹中。 - kRazzy R
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接