如何在Java中提取MFCC特征

4
我正在将一个语音识别项目从MATLAB转换为Java代码。使用提供的Java示例here,我已经能够读取.wav文件(作为值向量在范围-1至1内)。这与MATLAB中的wavread函数完全相同。
我的下一个任务是从原始样本向量中提取MFCC特征向量。在MATLAB中,我使用Voicebox轻松实现了这一点,但无法找到等效的Java工具。使用Voicebox,我的代码如下:
a = melcepst(samples(1,:), 44100)

'samples'中的每一行都包含表示每个.wav样本的向量。该方法返回每个样本的MFCC特征的二维矩阵。

我见过Sphinx,但无法理解如何将其用于此任务。 使用Sphinx或任何其他java解决方案的帮助将不胜感激。


为了在Java中从任何音频文件中提取MFCC和FTT值,最近我实现了一个Java程序。该程序生成与Librosa等价的MFCC和FTT值。由于它不是小代码片段,因此无法在此处发布完整的代码片段以便快速查看。https://github.com/Subtitle-Synchronizer/jlibrosa - Abhishek
1个回答

5
您可以使用Sphinx 4获取MFCC帧,操作如下:
AudioFileDataSource audioDataSource = new AudioFileDataSource(3200, null);
audioDataSource.setAudioFile(new URL("file:///path/to/my.wav", "source");

final ArrayList<DataProcessor> pipeline = new ArrayList<DataProcessor>();

pipeline.add(audioSource);
pipeline.add(new DiscreteFourierTransform());
pipeline.add(new MelFrequencyFilterBank(minFreq, maxFreq, numFilters));
pipeline.add(new DiscreteCosineTransform2(numFilters, 12));
FrontEnd f = new FrontEnd(pipeline);

Data mfccs;
do {
    mfccs = f.getData();
} while(mfccs != null);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接