1

我正在尝试比较 .wav 文件的相似性。我为此使用了谷歌音乐库,但对于类似的声音我得到了不好的解决方案。我比较了来自同一辆车的两辆汽车发动机的声音,对于人类来说,录音听起来非常相似,但我得到的指纹相似度得分为 0.012468828。录音是用麦克风制作的。

我得到这么差的分数是什么问题?

我用:

Wave wave = new Wave("wav1.wav");
Wave wave1 = new Wave("wav4.wav");
FingerprintSimilarity fingerprintSimilarity = wave.getFingerprintSimilarity(wave1);
float score = fingerprintSimilarity.getScore();
float similarity = fingerprintSimilarity.getSimilarity();
System.out.println("Similar sound :"+ "Score : " + score + "\n  Similarity : "+ similarity);

我的目标是创建一个程序,可以从汽车的声音中找到汽车模型。

是否还有其他运行得更好的库或者是音频指纹的问题?

4

2 回答 2

1

顾名思义,您使用的库是为分析音乐而开发的。相似性度量试图找到“指纹”,即独特的声音片段,而电机的声音非常单调,我猜算法最终会找到非常奇怪的片段并进行比较——这种情况不太可能给你带来好的结果.

如果您的目标是分析不同电机的声音是否相似,您应该尝试使用普通频谱分析。另一方面,如果你计划分析音乐,你最好在真实的音乐片段上尝试你的算法。

于 2015-02-12T21:44:30.363 回答
1

你应该基于指纹。

但是,您应该做的是:

  1. 获取数据
  2. 获取数据标注(什么声音属于什么电机)
  3. 从数据中提取音频特征
  4. 消除冗余的过程数据
  5. 开发分类模型
  6. 评估模型
  7. 判断哪些功能最适合您的问题
  8. 在应用程序中实现模型

正如你所看到的,它不仅仅是音乐那么简单。原因是对于音乐,有些人已经做了上述(很多很多次),并开发了相似性模型。对于您的域和应用程序特定模型,我没有听说过任何东西。因此,要么你应该检查声音事件类似的论文,要么检查某人可能已经开发了一个声音事件的应用程序(因为你拥有的是一个声音事件)。

PS 对于上述步骤,您可以使用 MARSYS、JAAudio、Sonic Visualizer 和 MIRToolbox 以及 WEKA。

于 2015-02-14T10:32:06.873 回答