c# AudioFingerprinting 和局部敏感散列

标签 c# audio hash audio-fingerprinting

我之前找到过类似的帖子,但没有真正回答这个问题。

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

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

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 的实现,但我不理解它们,因此发布指向它们的链接对我帮助不大。

再次感谢!

最佳答案

这可能是这个的副本: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 秒间隔内的线性指纹。

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

这篇关于制作类似于 Shazaam 的粗略 Java 的文章发表于前一段时间:http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/可能对您有所帮助。

关于c# AudioFingerprinting 和局部敏感散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9028623/

相关文章:

c# - 读取 NpgsqlDataReader 时编码的字节序列无效

c# - Linq-To-Entities 'Contains' 子句 1-many 关系

c# - 如何阻止用户更改查询字符串

javascript - 如何通过在JavaScript中构造AudioBuffer来正确播放WAV文件?

perl - 在 perl 中散列的数组

c# - 事件处理程序方法的命名约定

flash - Flash游戏我应该使用MP3或WAV文件格式吗?

android - opensl的​​NDK更新错误

python - 在 Python 中将字符串从 sha1 Hash 转换为 base 64,按照 VBA 示例返回结果

c - C中Hashtable的插入函数