from librosa.feature import mfccfrom librosa.core import loaddef extract_mfcc(sound): data, frame = load(sound) return mfcc(data, frame)mfcc = extract_mfcc("sound.wav")
我想获取以下sound.wav文件的MFCC,该文件时长为48秒。
我知道data * frame = 音频长度
。
但是当我按照上述方法计算MFCC并获取其形状时,结果是:(20, 2086)
这些数字代表什么意思?我如何仅通过MFCC来计算音频的时间?
我正在尝试计算每毫秒音频的平均MFCC。
任何帮助都将不胜感激!谢谢你:)
回答:
这是因为梅尔频率倒谱系数是在一个窗口上计算的,即样本数量。声音是波,因此不能通过单个样本(数字)来提取任何特征,因此需要窗口。
为了计算MFCC,使用了快速傅里叶变换(FFT),这正是需要提供窗口长度的原因。如果你查看librosa的mfcc文档,你不会发现这是一个显式参数。这是隐式的,具体来说:
- FFT窗口的长度:2048
- 连续帧之间的样本数:512
它们作为**kwargs
传递,并在这里定义。
如果你现在考虑你的音频的采样频率和这些数字,你将得到你提供的最终结果。
由于librosa的默认采样率为22050,音频长度为48秒,窗口等于512,以下是结果:
这个数字并不完全是2086
,因为:
- 你的音频长度并不完全是48秒
- 实际窗口长度为2048,步长为512。这意味着在末尾你会“丢失”几个帧。