如何在 Java 中提取 MFCC 特征

Posted

技术标签:

【中文标题】如何在 Java 中提取 MFCC 特征【英文标题】:How to Extract MFCC features in Java 【发布时间】:2014-07-03 09:25:06 【问题描述】:

我正在将一个语音识别项目从 MATLAB 转换为 Java 代码。 我已经能够使用here 提供的 java 示例读取 .wav 文件(作为 -1 到 1 范围内的值的向量)。这与 MATLAB 中的 wavread 函数完全相同。

我的下一个任务是从原始样本向量中提取 MFCC 特征向量。在 MATLAB 中,我使用 Voicebox 轻松实现了这一点,但无法找到 Java 等效项。使用 Voicebox,我有如下代码:

a = melcepst(samples(1,:), 44100)

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

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

【问题讨论】:

为了从Java中的任何音频文件中提取MFCC、FTT值,最近我实现了java程序。该程序生成 MFCC 和 FTT 的 Librosa 等效值。由于它的代码不小,因此无法在此处发布完整的代码 sn-p 以便快速浏览。 github.com/Subtitle-Synchronizer/jlibrosa 【参考方案1】:

您可以使用 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);

【讨论】:

以上是关于如何在 Java 中提取 MFCC 特征的主要内容,如果未能解决你的问题,请参考以下文章

使用 MFCC 进行特征提取

如何将提取的音高值保存在 csv 文件中?

音频特征:mfcc提取

如何处理音频字节以从实时音频流中提取 MFCC?

人工智能我见及特征提取mfcc算法理解

Librosa MFCC 特征提取