我正在使用 Librosa 的函数 (librosa.feature.mfcc) 从音频文件中提取 MFCC,并且我正确地取回了一个具有我预期形状的 numpy 数组:13 个 MFCC 值对应音频文件的整个长度,即 1292窗口(30 秒内)。
缺少的是每个窗口的计时信息:例如,我想知道 MFCC 在 5000 毫秒、5200 毫秒等时的样子。 我必须手动计算时间吗?有没有办法自动获取每个窗口的准确时间?
最佳答案
“时间信息”不是直接可用的,因为它取决于采样率。为了提供此类信息,librosa
将创建自己的类。这反而会污染界面并使其互操作性降低。在当前的实现中,feature.mfcc
返回给您 numpy.ndarray
,这意味着您可以轻松地将此代码集成到 Python 中的任何位置。
将 MFCC 与时序相关联:
import librosa
import numpy as np
filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)
hop_length = 512 # number of samples between successive frames
mfcc = librosa.feature.mfcc(y=y, n_mfcc=13, sr=sr, hop_length=hop_length)
audio_length = len(y) / sr # in seconds
step = hop_length / sr # in seconds
intervals_s = np.arange(start=0, stop=audio_length, step=step)
print(f'MFCC shape: {mfcc.shape}')
print(f'intervals_s shape: {intervals_s.shape}')
print(f'First 5 intervals: {intervals_s[:5]} second')
请注意,mfcc
和 intervals_s
的数组长度是相同的 - 这是我们在计算中没有出错的合理性检查。
MFCC shape: (13, 2647)
intervals_s shape: (2647,)
First 5 intervals: [0. 0.02321995 0.04643991 0.06965986 0.09287982] second
关于python - 从使用 librosa.feature.mfcc 生成的 MFCC 获取计时信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65249690/