如何在Weka中使用MFCC进行音频分类?



我正在尝试开发一种在Weka中使用MFCC对音频进行分类的方法。我拥有的 MFCC 以 1024 的缓冲区大小生成,因此每个音频录制都有一系列 MFCC 系数。我想将这些系数转换为 Weka 的 ARFF 数据格式,但我不确定如何处理这个问题。

我还问了一个关于合并数据的问题,因为我觉得这可能会影响数据转换为 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

任何帮助将不胜感激。

编辑: 我按照本网站的方法使用 openSMILE 使用 Weka 生成了一些 ARFF 文件,但我不确定如何使用这些数据对音频进行分类,因为每行数据是来自同一文件的 10 毫秒音频。每行的 name 属性是"未知",我假设这是数据尝试分类的属性。我如何能够对整体声音(而不是 10 毫秒(进行分类并将其与其他几个整体声音进行比较?


编辑#2:成功!

在更彻底地阅读了我找到的网站后,我看到了累积脚本和测试和训练数据文件。累加脚本将来自单独音频文件的每组 MFCC 数据生成的所有文件一起放入一个 ARFF 文件中。他们的文件由大约 200 个属性组成,其中包含 12 个 MFCC 的统计数据。虽然我无法使用OpenSmile检索这些统计数据,但我使用Python库来做到这一点。统计数据包括最大值、最小值、峰度、范围、标准偏差等。我在Weka中使用BayesNet和多层感知器准确地对音频文件进行了分类,这两者都为我带来了100%的准确性。

我对 MFCC 了解不多,但如果您尝试对音频文件进行分类,那么@data下的每一行都必须代表一个音频文件。如果您使用时间窗口或@data下的每一行只有一个 MFCC,那么 Weka 分类器将尝试对时间窗口或 MFCC 进行分类,这不是您想要的。以防万一您不熟悉格式(只是链接,因为我看到您将音频文件的功能与@data放在同一行(,下面是一个示例,其中每行代表一个鸢尾花植物:

% 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,因为每个数据/音频文件必须具有相同数量的属性(。我会尝试一下,看看进展如何。

编辑: 如果音频文件的大小不同,您可以:

  • 剪切音频文件比最短的音频短。基本上,您会丢弃音频文件末尾的数据。
  • 使属性的数量足够高以适合最长的音频文件,并放置任何 MFCC 系数表示音频文件的未填充属性的静音,这些属性比最长的音频文件短路。
  • 如果 MFCC 值总是在某个范围内(例如 -10 到 10 或类似的东西(,那么可以使用"词袋"模型。您的属性将表示 MFCC 系数落在音频文件的特定范围内的次数。因此,第一个属性可能表示介于 -10 和 -9.95 之间的 MFCC 系数的数量,第二个属性表示介于 -9.95 到 -9.90 之间的 MFCC 系数的数量。因此,如果您有一个非常短的音频文件,其中包含两个 MFCC(不太可能,仅出于示例目的(,并且一个系数为 10,另一个系数为 -9.93,则最后一个属性的值为 1,第二个属性的值为 1,但所有其他属性的值均为 0。这种方法的缺点是不考虑MFCC系数的顺序。但是,即使忽略了单词顺序,此方法也适用于文本分类,所以谁知道呢,也许它适用于音频。
  • 除此之外,我会看看你是否在你的合并问题上得到任何好的答案。

相关内容

  • 没有找到相关文章

最新更新