c#AudioFingerprinting和Locality Sensitive Hashing

时间:2012-01-27 03:30:09

标签: c# audio hash audio-fingerprinting

我之前发现了simlar帖子,但没有真正回答这个问题。

在我的指纹识别中,我产生一个有5个整数的记录集。例如: 33,42,88,121,194

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

0-40

40-80

80-120

120-180

180-250

我试图产生一个哈希(一个宽容的哈希),它可能会产生相同的哈希值 可以说是33,42,88,121,194

33,43,88,122,195

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

第一关是这个LSH?因为我已经读过,这对于音频指纹识别来说是最好的。

如果没有,任何人都可以为可能正在寻找的功能提供一些伪代码或c#吗?我已经阅读了LSH和matlab以及perl实现,但我不理解它们,所以发布一个链接并不会给我太多帮助。

再次感谢!

1 个答案:

答案 0 :(得分:0)

这可能与此重复:Compare two spectogram to find the offset where they match algorithm,您尝试做的是为样本中峰的粗略分布生成直方图。有几种方法可以做到这一点,另一个“示例”在这里:Compare two spectogram to find the offset where they match algorithm

这样做的一种方法是使用峰值数据的快速傅里叶变换及其分布(随时间推移)以蒸馏形式产生粗略等效的样品。要做到这一点,你要做的事情大致类似于:

  1. 将样本分成一些不连续的部分(比如1秒)
  2. 对于每个样品部件,制作一个近似样品的指纹(比如取5-7个高峰和低峰,对它们进行标准化,然后对它们进行散列
  3. 您现在可以单独保存每个指纹(在集合中),也可以对序列运行转换以根据需要生成单个指纹。大多数情况下,您只需将序列附加在一起,以1秒的间隔获得线性指纹。
  4. 要比较指纹,请在第二个样本上运行相同的过程,然后使用Diff算法比较两者,使用一些“模糊”来确定它们的接近程度。您需要比较两个维度上的指纹,离散指纹的顺序以及每个样本的总体差异。

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