c#AudioFingerprint和位置敏感哈希

本文关键字:哈希 位置 c#AudioFingerprint | 更新日期: 2023-09-27 18:21:29

我以前发现过类似的帖子,但没有什么能真正回答这个问题。

在指纹识别中,我生成了一个包含5个整数的记录集。例如:33,42,88121194

这些对应于对于特定音乐样本具有最高幅度的频率。例如:对于30ms的音频样本,我有以下频率的桶:

0-40

40-80

80-120

120-180

180-250

我正在尝试生成一个散列(一个宽容的散列),它可能会为33,42,88121194,就像一样

33,43,88122195

在频率上存在微小差异的情况下,将形成类似的散列。

第一关是LSH吗?正如我读到的,这是最好的音频指纹。

如果没有,有人能为一个可能做我想做的事情的函数提供一些伪代码或c#吗?我读过LSH、matlab和perl的实现,但我不理解它们,所以发布它们的链接对我没有太大帮助。

再次感谢!

c#AudioFingerprint和位置敏感哈希

这可能是重复的:比较两个光谱图以找到它们匹配的偏移量。算法显示,您试图为样本中峰值的粗略分布生成一个直方图。有几种方法可以做到这一点,另一个"例子"在这里:比较两个光谱图,找出它们与算法匹配的偏移量

一种方法是对峰值数据及其分布(随时间变化)进行快速傅立叶变换,以产生蒸馏形式的样本的大致等效值

  1. 将样品分成几个离散的部分(比如1秒)
  2. 对于每个样本部分,开发一个近似样本的指纹(比如取5-7个高峰和低峰,对它们进行归一化,然后对它们进行散列
  3. 现在,您可以单独保留每个指纹(在集合中),也可以根据需要对序列进行转换以生成单个指纹。大多数情况下,您只需将序列附加在一起,就可以在1秒的间隔内获得线性指纹

为了比较指纹,你在第二个样本上运行相同的过程,然后使用Diff算法来比较两者,使用一些"模糊"来决定它们的接近程度。您需要比较二维指纹、离散指纹的顺序以及每个样本的总体差异。

这篇关于制作相当于Shazaam的粗略Java的文章发布于不久前:http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/可能会对你有所帮助。