我正在从一些音频文件中提取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划分为一定的时间?

任何帮助将不胜感激。

最佳答案

经过更多研究,我访问了this网站,该网站清楚地显示了将MFCC用于Weka的步骤。它显示了一些具有各种统计数据的数据文件,每个数据文件在Weka中均作为单独的属性列出。我相信当报纸说



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

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

关于java - 如何合并MFCC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45222357/

10-10 14:23