Java 使用FFT比较两个音频文件是唯一的方法吗?

Java 使用FFT比较两个音频文件是唯一的方法吗?,java,audio,mp3,fft,wav,Java,Audio,Mp3,Fft,Wav,我是信号处理新手,尝试使用FFT比较两个音频文件。 将文件读取为字节,然后转换为复数,然后将其发送到fft。 然后计算复数的大小(fft输出)。试图比较震级,但它们不匹配 如果我遗漏了什么,请告诉我 P>是否有其他方式来比较两个音频文件?一般来说,完整文件的FFT将不相等——考虑40秒。包含四个10秒的文件。分别为20Hz、40Hz、60Hz和80Hz的正弦波段 整个文件的相应频谱将显示这四个频率的峰值,但任何10秒。摘录最多有两个。因此,它们不匹配 现在,你试图做的听起来有点像沙扎姆,幸运的

我是信号处理新手,尝试使用FFT比较两个音频文件。 将文件读取为字节,然后转换为复数,然后将其发送到fft。 然后计算复数的大小(fft输出)。试图比较震级,但它们不匹配

如果我遗漏了什么,请告诉我


<> P>是否有其他方式来比较两个音频文件?

一般来说,完整文件的FFT将不相等——考虑40秒。包含四个10秒的文件。分别为20Hz、40Hz、60Hz和80Hz的正弦波段

整个文件的相应频谱将显示这四个频率的峰值,但任何10秒。摘录最多有两个。因此,它们不匹配

现在,你试图做的听起来有点像沙扎姆,幸运的是,他们已经发布了它的工作原理。也许这会解决你的问题

另一种方法(虽然可能无法处理音高和速度变化),考虑上面我的例子的含义:你不应该尝试匹配一张超过40秒的谱图。只代表10秒。因此,您必须找到第二个文件是从原始文件的哪个10秒段获取的


要实现这一点,您可以使用一个简单的滑动窗口(从第1秒到第10秒,然后从第2秒到第11秒,依此类推),或者您可以将第二个文件切成更小的块,并将初始滑动窗口与来自的技术结合起来。

请不要在有问题的标题中使用所有大写字母。这两个音频文件相同吗?它们有多“不同”?对于您的应用程序,什么构成“相等”呢?它们可以是mp3或wav。两个文件的格式相同。我必须再次确定一个音频文件是否派生自另一个音频文件,您所说的“派生”是什么意思?对于将“派生”算法简化为可以实现的算法,您有什么硬性标准吗?例如,如果两个文件是同一个源,但其中一个文件的速度提高了(比如)10%,该怎么办。如果它们是相同的,但音高不同怎么办?这是一个极其困难的问题。