【发布时间】:2015-07-24 06:19:18
【问题描述】:
我想比较两个音频文件,例如 mp3 和 wav。我使用musicg进行指纹比较。
Wave record1 = new Wave(music1.toString());
Wave record2 = new Wave(music2.toString());
FingerprintSimilarity Similarity=record1.getFingerprintSimilarity(record2);
System.out.println(Similarity.getSimilarity());
musicg 仅适用于 wav,因此我使用 JAVE 将 mp3 转换为 wav
File temp = new File("temp.wav");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("pcm_s16le");
audio.setBitRate(new Integer(128000));
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("wav");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, temp, attrs);
现在的问题是,当我尝试比较两个未转换指纹的 wav 时,效果很好,但是当我比较两个必须转换的不同音频时,它总是返回两个音频相同。 Wave 创建record1 与record2 相同的频谱图,当我给它两个不同的音频时。
【问题讨论】:
-
只是一个想法:我看到您正在使用“temp.wav” - 是否使用相同的临时文件将两个文件覆盖到 wav?这样两个文件实际上只是引用同一个文件,并且实际上是在比较自己?
-
谢谢,我不知道我是怎么想念的……花了 6 小时以上的时间,并没有看到那个简单的错误。我瞎了……
-
没问题。我添加了一个你可以勾选的答案:)
标签: java audio compare fingerprint