我试图比较.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);
我的目标是创建一个可以从其发动机声音中找到汽车模型的程序。
是否有其他库工作得更好或是音频指纹问题?
答案 0 :(得分:1)
顾名思义,您使用的库是为分析音乐而开发的。相似性测量试图找到"指纹",即独特的声音片段,而电机的声音是非常单调的,我猜这个算法最终会找到非常奇怪的部分并比较它们 - 这种情况不太可能为了给你带来好成绩。
如果你的目标是分析不同电机的相似声音,你应该尝试使用普通光谱分析。另一方面,如果您计划分析音乐,最好在真实音乐片段上尝试算法。
答案 1 :(得分:1)
你应该以指纹为基础。
你应该做的是:
正如您所看到的,它不仅仅是音乐的简单。原因在于,对于音乐,一些人已经完成了上述(很多次),并且开发了相似性的模型。对于您的域名和应用程序特定模型,我没有听说过任何事情。因此,要么你应该检查声音事件相似的论文或检查有人可能已经开发了一个声音事件的应用程序(因为你有一个声音事件)。
P.S。对于上述步骤,您可以使用MARSYS,JAudio,Sonic Visualizer和MIRToolbox以及WEKA。