如何合并MFCC

时间:2017-07-20 18:16:45

标签: java audio feature-extraction mfcc tarsosdsp

我正致力于从某些音频文件中提取MFCC功能。我目前的程序为每个文件提取了一系列MFCC,并且缓冲区大小为1024.我在一篇论文中看到了以下内容:

  

通过计算每个特征向量元素的平均值和方差(合并)来组合在第二个音频数据中提取的特征向量。

我目前的代码使用TarsosDSP来提取MFCC,但我不确定如何将数据分成"第二个音频数据"为了合并MFCC。

我的MFCC提取代码

int sampleRate = 44100;
int bufferSize = 1024;
int bufferOverlap = 512;
inStream = new FileInputStream(path);
AudioDispatcher dispatcher = new AudioDispatcher(new UniversalAudioInputStream(inStream, new TarsosDSPAudioFormat(sampleRate, 16, 1, true, true)), bufferSize, bufferOverlap);
final MFCC mfcc = new MFCC(bufferSize, sampleRate, 13, 40, 300, 3000);
dispatcher.addAudioProcessor(mfcc);
dispatcher.addAudioProcessor(new AudioProcessor() {
    @Override
    public void processingFinished() {
        System.out.println("DONE");
    }
    @Override
    public boolean process(AudioEvent audioEvent) {
        return true;  // breakpoint here reveals MFCC data
    }
});
dispatcher.run();

缓冲区大小究竟是什么,是否可以将音频分割为1秒的窗口?有没有办法将MFCC系列划分为一定的时间?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

经过更多研究后,我遇到了this网站,该网站明确显示了使用MFCC进行Weka的步骤。它显示了一些具有各种统计数据的数据文件,每个都在Weka中列为单独的属性我相信当论文说

  

计算均值和方差

它们意味着每个MFCC系数的均值和方差被用作组合数据文件中的属性。当我按照网站上的示例来合并MFCC时,我使用了最大值,最小值,范围,最大位置,最小位置,平均值,标准偏差,偏度,峰度,四分位数和四分位数范围。

要将音频输入分成几秒钟,我相信MFCC的集合是以作为参数输入的采样率提取的,所以如果我将其设置为100,我会等待100个周期来合并MFCC。如果我错了,请纠正我。