如何在 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 特征的主要内容,如果未能解决你的问题,请参考以下文章