我正在尝试开发一种在Weka中使用MFCC对音频进行分类的方法。我生成的MFCC的缓冲区大小为1024,因此每个音频录制都有一系列MFCC系数。我想将这些系数转换为Weka的ARFF数据格式,但我不确定如何解决这个问题。
我还问了一个question about merging数据,因为我觉得这可能会影响到ARFF格式的数据转换。
我知道对于ARFF,数据需要通过属性列出。 MFCC的每个系数应该是单独的属性还是系数的数组作为单个属性?每个数据应该代表一个MFCC,一个时间窗口,还是整个文件或声音?下面,我写出了我认为如果仅考虑一个MFCC应该是什么样子,我认为它不能将整个声音分类。
@relation audio
@attribute mfcc1 real
@attribute mfcc2 real
@attribute mfcc3 real
@attribute mfcc4 real
@attribute mfcc5 real
@attribute mfcc6 real
@attribute mfcc7 real
@attribute mfcc8 real
@attribute mfcc9 real
@attribute mfcc10 real
@attribute mfcc11 real
@attribute mfcc12 real
@attribute mfcc13 real
@attribute class {bark, honk, talking, wind}
@data
126.347275, -9.709645, 4.2038302, -11.606304, -2.4174862, -3.703139, 12.748064, -5.297932, -1.3114156, 2.1852574, -2.1628475, -3.622149, 5.851326, bark
非常感谢任何帮助。
修改: 我使用ARFF files根据openSMILE网站上的方法使用Weka生成了一些this,但我不确定这些数据将如何用于对音频进行分类,因为每行数据为10来自同一文件的毫秒音频。每行的name属性为" unknown,"我假设是数据试图分类的属性。如何将整体声音(而不是10毫秒)分类并将其与其他几种整体声音进行比较?
编辑#2:成功!
在更彻底地阅读了我找到的website后,我看到了Accumulate脚本和Test and Train数据文件。 accumulate脚本将所有文件生成的每组MFCC数据从单独的音频文件一起放入一个ARFF文件中。他们的文件由大约200个属性组成,其中包含12个MFCC的统计数据。虽然我无法使用OpenSmile检索这些统计信息,但我使用Python库来执行此操作。统计数据是最大值,最小值,峰度,范围,标准差等。我在Weka中使用BayesNet和Multilayer Perceptron准确地对我的音频文件进行了分类,两者都为我提供了100%的准确度。
答案 0 :(得分:1)
我对MFCC了解不多,但如果您尝试对音频文件进行分类,那么@data
下的每一行都必须代表一个音频文件。如果您在@data
下为每一行使用了时间窗口或只有一个MFCC,那么Weka分类器将尝试对时间窗口或MFCC进行分类,这不是您想要的。如果您不熟悉格式(只是链接,因为我看到您将音频文件的功能放在与@data
相同的行),这里是example,其中每一行代表一个虹膜植物:
% 1. Title: Iris Plants Database
%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
就解决你应该用于音频文件的属性的问题而言,它听起来(没有双关语)就像使用MFCC系数一样可行(假设每个音频文件具有相同数量的MFCC,因为每个数据/音频文件必须具有相同数量的属性)。我会尝试一下,看看它是怎么回事。
编辑: 如果音频文件的大小不同,您可以: