2010-01-14 137 views
13

我想类似TunaticMidomi建立的东西(试出来,如果你不知道他们在做什么),我想知道我不得不用什么算法;这个想法我有这样的应用程序的工作原理是这样的:音乐识别和信号处理

  1. 有几首歌曲
  2. 为每首歌曲的大数据库降低质量/比特率(以64kbps的例如),并计算了声“哈希”
  3. 有你想要找出
  4. 的歌曲再次降低质量/比特率(64kbps的以音乐的声音/节选),并计算声“散列“
  5. 如果4.声音散列在任何2.声音哈希返回匹配的音乐

我虽然降低了质量/比特率的因环境噪声和编码的差异。

我在正确的轨道吗?任何人都可以提供任何特定文档或示例? Midori似乎甚至承认hum's,这是非常令人印象深刻!他们如何做到这一点?

是否存在声音哈希值,还是我刚编好的东西?如果他们这样做,我该如何计算它们?更重要的是,如何检查child-hash是否在father-hash

我该怎么去用Python(也许是内置模块)或PHP构建一个类似的系统?

一些例子(最好在Python或PHP中)将不胜感激。提前致谢!

+1

相关问题:[声音样本识别库/代码](http://stackoverflow.com/questions/2817663/sound-sample-recognition-library-code),[声学指纹opensource?](http:// stackoverflow .COM /问题/ 2462410 /声学指纹开源)。好[来自MusicBrainz的维基概述](http://wiki.musicbrainz.org/Fingerprinting)。 – Albert 2013-01-15 10:00:27

+0

这是Python的一个很好的选择:https://github.com/worldveil/dejavu – lollercoaster 2014-07-21 04:40:58

回答

10

我在一个很酷的框架的外围工作,实现了几种音乐信息检索技术。我几乎不是一个专家(编辑:实际上我没有接近专家,只是为了澄清),但我可以告诉我们,快速傅里叶变换在这个东西的所有地方都会使用。傅里叶分析很古怪,但其应用非常简单。基本上,当您在频域而非时域分析音频时,您可以获得大量有关音频的信息。这是傅立叶分析给你的。

这可能与您想要做的事情有点偏离。在任何情况下,项目中都有一些很酷的工具可供使用,以及查看核心库自身的源代码:http://marsyas.sness.net

+0

我如何检测是否有人吹口哨到iPhone麦克风..? – iDeveloper 2015-08-30 14:31:50

1

自从我上次做信号处理以来,查看频域表示(例如FFT或DCT)。然后你可以做一个散列的搜索数据库歌曲与该序列英寸

棘手的部分是快速搜索(也许一些关于基因搜索的论文可能是有趣的)。我怀疑iTunes也会检测一些工具来缩小搜索范围。从音乐中提取

3

MFCC是在寻找歌曲之间的相似性,击鼓..这是最常用的找到类似的歌曲是非常有用的。正如darren所指出的,Marsyas是一种可用于提取MFCC并通过将MFCC转换为单个向量表示来找到类似歌曲的工具。

除了MFCC之外,Rhythm也用于查找歌曲相似度。有在Mirex 2009

介绍几篇论文,会给你不同的算法和功能,在检测音乐相似度最有帮助的很好的概述。

+0

MFCC的+1 – keyboardP 2010-01-14 23:55:24

1

我看过一个关于在某个音乐信息检索服务(没有提及姓名)做它的方法纸 - 通过计算短时傅立叶变换在音频的采样。该算法然后在频域中挑出“峰值”,即时间位置和频率特别高的幅度,并使用这些峰值的时间和频率来生成散列。原来,哈希具有不同样本之间令人惊讶的几个碰撞,也反对的峰值信息约50%的数据丢失站起.....

11

我做音乐信息检索(MIR)的研究。关于音乐指纹的开创性论文是2002年至2002年间由Haitsma和Kalker撰写的。谷歌应该给你它。

我读了一篇关于Shazam方法的早期文章(真的很早; 2000年之前)。此时,他们基本上检测到光谱峰,然后散列峰。我相信程序已经发展。

这两种方法在信号级别处理音乐相似性,即它对于环境失真是强健的。对于哼唱查询(QBH),我认为这不太好。然而,对于不同的(但相关的)解决方案,这是一个不同的(但相关的)问题,所以你可以在文献中找到解决方案。 (名字太多)

ISMIR程序可以在线免费获取。你可以找到有宝贵的东西:http://www.ismir.net/

我用像Marsyas现有库达成一致。取决于你想要的。我想,Numpy/Scipy在这里是不可或缺的。简单的东西可以用Python自己编写。哎呀,如果你需要像STFT,MFCC这样的东西,我可以给你发邮件给你的代码。

+1

我知道我忘记了一些东西:音符级的相似性通常是通过计算色度图来实现的。对于每个时间帧,计算信号中有多少C,C#,D,D#,...,A#,B。因此,色度图具有12维的尺寸。许多相似性方法使用这个。 – 2010-01-15 15:23:53

+0

感谢您的输入。你能给我发电子邮件吗?我很难弄清楚这一点,一些示例代码会很有用。 – 2010-01-21 21:36:54

+0

@Steve Tjoa有可能检测到哨声..? – iDeveloper 2015-08-26 15:46:27

1

目前我正在开发一个使用ActionScript 3的音乐搜索引擎。这个想法是首先分析和弦并标记出频率剧烈变化的帧(它仅限于mp3文件)(旋律变化并忽略噪音) 。之后,我对输入声音做同样的事情,并将结果与​​倒排文件进行匹配。匹配的人确定匹配的歌曲。

对于阿克塞尔的方法,我觉得你不应该担心的查询它是否是一个唱歌或者只是哼唱,因为你没有实现语音识别程序。但我很好奇你的使用散列函数的方法。你能向我解释一下吗?

1

MusicBrainz project维护这样的数据库。您可以根据指纹对其进行查询。

该项目已经存在了一段时间,并在过去使用过不同的指纹。请参阅here获取列表。

他们正在使用的最新指纹是AcoustId。有Chromaprint库(也与Python绑定),您可以在其中创建此类指纹。您必须为其提供原始PCM数据。我最近在Python中编写了一个库,它可以解码(使用FFmpeg)并提供生成AcoustId指纹(使用Chromaprint)和其他东西(也用于通过PortAudio播放流)的功能。请参阅here

4

我最近移植我的音频基于地标的指纹系统的Python:

https://github.com/dpwe/audfprint

它可以识别小(5-10秒)摘录的几千轨道10S的参考数据库,并对噪声和信道失真非常有效。它使用局部谱峰的组合,类似于Shazam系统。

这只能匹配完全相同的音轨,因为它依赖于频率和时间差的细节 - 它甚至不匹配不同的音乐,当然不会覆盖版本或嗡嗡声。据我所知,Midomi/SoundHound通过匹配嗡嗡声来相互作用(例如通过dynamic time warping),然后在一组嗡嗡声与预期音乐轨道之间有一组人为策划的链接。

将嗡嗡声直接匹配到音乐曲目(“通过哼唱进行查询”)是音乐信息检索中正在进行的研究问题,但仍然相当困难。您可以看到去年在MIREX 2013 QBSH Results处评估的一组系统的摘要。

0

对于查询哼唱功能,它比音频指纹识别解决方案更复杂,困难来自于:

  • 如何有效地收集在真实世界应用的旋律数据库?许多演示系统都使用MIDI来构建,但是对于一家公司来说,MIDI解决方案的成本极其低廉。
  • 如何处理时间差异,例如,用户哼声可能会快或慢。使用DTW?是的,DTW是处理具有时间差异的时间序列的非常好的解决方案,但是它会花费太多的CPU负载。
  • 如何制作时间序列索引?

这是一个哼唱开源项目https://github.com/EmilioMolina/QueryBySingingHumming的演示查询,可以作为参考。