我正在尝试为音频文件获取单向量特征表示,以用于机器学习任务(具体地说,使用神经网络进行分类)。我在计算机视觉和自然语言处理方面有经验,但我需要一些帮助来加快音频文件的速度。
音频文件有各种各样的特征描述符,但MFCC似乎是用于音频分类任务最多的。我的问题是:如何获取音频文件的MFCC表示,它通常是一个矩阵(假设是系数矩阵),并将其转换为单个特征向量?我目前正在使用librosa来做这件事。
我有一堆音频文件,但它们的形状各不相同:
for filename in os.listdir('data'):
y, sr = librosa.load('data/' + filename)
print filename, librosa.feature.mfcc(y=y, sr=sr).shape
213493.ogg (20, 2375)
120093.ogg (20, 7506)
174576.ogg (20, 2482)
194439.ogg (20, 14)
107936.ogg (20, 2259)作为一个简历人员,我会做的是通过k均值量化这些系数,然后使用类似scipy.cluster.vq的东西来获得相同形状的向量,我可以将其用作神经网络的输入。这是你在音频情况下也会做的吗,还是有不同的/更好的方法来解决这个问题?
发布于 2014-09-23 15:31:36
查看scikits.talkbox。它有各种功能,可以帮助你从音频文件中生成MFCC。具体地说,您可能希望这样做来生成MFCC。
import numpy as np
import scipy.io.wavfile
from scikits.talkbox.features import mfcc
sample_rate, X = scipy.io.wavfile.read("path/to/audio_file")
ceps, mspec, spec = mfcc(X)
np.save("cache_file_name", ceps) # cache results so that ML becomes fast然后,在执行ML时,执行如下操作:
X = []
ceps = np.load("cache_file_name")
num_ceps = len(ceps)
X.append(np.mean(ceps[int(num_ceps / 10):int(num_ceps * 9 / 10)], axis=0))
Vx = np.array(X)
# use Vx as input values vector for neural net, k-means, etc我在构建音频流派分类工具( genreXpose)时用到了这个东西。
PS:我使用的一个很方便的音频转换工具是PyDub
发布于 2014-11-14 11:49:11
这真的取决于任务。我会尝试kmeans,等等,但在很多情况下,这可能没有帮助。
有一些使用dynamic time warping with librosa的很好的例子。
也有一个想法,使用一个已知形状的滑动窗口,可能也是很好的。然后,您可以考虑先前的预测和转移概率矩阵。
发布于 2017-10-17 21:54:19
通常,在音频分类文献中,根据分类任务,所有音频文件都会被截断到相同的长度(即,我正在研究跌倒检测设备,因此我知道音频文件不应该持续超过1秒,因为这是跌倒事件的预期持续时间)。
然后,对于每个音频文件,您可以提取每个帧的MFCC系数并将其堆叠在一起,从而为给定的音频文件生成MFCC矩阵。由于每个音频文件都具有相同的长度,并且我们假设所有帧都包含相同数量的样本,因此所有矩阵都将具有相同的大小。
https://stackoverflow.com/questions/25988749
复制相似问题