在另一个WAV中找到WAV样本的出现?

6 fft wav

如果已知精确样本存在于wav中的某个位置(但可能与其他声音混合),那么使用FFT可以在较长的wav内找到小wav样本的出现吗?

编辑

(在收到两个回复之后):如果我有一个包含所有已知声音的库,可以在更大的WAV中,并希望在该WAV中找到每个声音的出现,该怎么办?换句话说,我知道可以混入大wav的每一种可能的声音,并希望找到它们的出现?

end*_*ith 5

这完全取决于您要查找的内容以及要在其中查找的内容。

  • 如果您正在寻找与较大 WAV 文件的块完全相同的样本,那么您可以直接搜索值。
  • 如果声音完全相同,但样本不准确(例如,将 MP3 剪辑与同一首歌曲的 WAV 进行匹配),您可以使用互相关轻松找到它。通过使用 FFT 方法而不是显式对样本进行相乘和求和的“简单”方法,可以显着加快互相关速度。
  • 如果您正在寻找与其他声音混合的简短样本,仍然可以使用互相关,但这取决于其他声音是否影响匹配。对于具有简单样本且没有效果的数码钢琴,直接输入数码录音机,这可能有效。
  • 然而,如果声音经过任何类型的过滤、极性反转或相移,则效果不会很好,因为波形会改变。因此,如果通过扬声器弹奏钢琴,然后用麦克风录制,这不是一个可行的解决方案。

在这种情况下,更好的方法可能是使用短时傅立叶变换(STFT)创建记录的频谱图以及您要查找的内容的频谱图,然后对两个图像。频谱图是一段时间内声音频谱幅度的二维图像,您可以将其进行匹配。(这可能是一种迂回的方式来做一些事情,有更专门的算法,但我不知道它会被称为什么。);)

您可以在某处上传一些声音片段吗?


Mat*_*del 3

我认为精确并不是指样本值精确。如果样本值精确,那么搜索样本值就很简单,而且快速且高效。

如果您正在寻找有贡献的声音位,最好的方法是使用称为“卷积”的数学过程。基本上,采取您试图在大样本中找到的样本,有效地将其放置在大样本旁边,然后进行关联。对每个样本位置执行此操作。您将从中得到一条曲线,该曲线在样本所在位置具有明显的尖峰。它的计算量相当大,但计算机已经变得相当快,所以它是可行的。

但是 - 这是假设这两种情况的样本来自相同的录音。拾取鼓声,即使是来自两个不同位置的相同鼓声,也不会产生很好的相关性。

希望有帮助。