基于指纹的音乐检索是一种新型的音乐检索方式,它让用户录制一段正在播放的音乐,然后上传到服务器进行匹配,最后返回对应的歌曲信息。与哼唱检索相比,它适用范围更广,使用也更加方便。
基于指纹的音乐检索核心是从原始的波形音乐中提取指纹,然后利用指纹进行匹配。指纹可以看做一首歌的哈希值,相同的歌有相同的指纹,不同的歌有不同的指纹。但是和哈希值不同,一首歌的指纹并不是一个单独的数字或者字符串,而是一个附属有时间属性的数字集合。
提取指纹的算法很多,主要有三大类:echoprint,chromaprint和landmark等,具体可参考论文《Evaluatingmusicalfingerprinting systems》。目前最常用的指纹提取算法是shazam公司03发表的论文《AnIndustrial-Strength Audio Search Algorithm》提出的landmark算法。由于landmark算法的检索准确率较高,因而获得了广泛的研究和应用。最近根据上面的论文做了一个开源实现,下面详细介绍一下算法流程。
图1 基于指纹的音乐检索算法流程
1 算法流程
图一描述了算法的流程。首先需要将原始波形音乐由时域变换到频域,方法就是采用FFT快速傅里叶变换。这个地方有一个可调参数是每一帧的位移是多少,一般会选择10~40毫秒之间。变换之后会得到一个频谱图,如图二所示。频谱图是一个三维图,X坐标是时间,Y坐标是频率,Z坐标是能量。算法的第二步是从频谱图中提取一系列的landmark。Landmark就是频谱图中的一些能量峰值,如图2(a)中的黑点所示。选取landmark的规则不固定,根据不同的方法和参数选定的landmark也不同。但是可以通过控制参数调节每秒选取的landmark点数。第三步就是利用选定的landmark构造一系列指纹。构造指纹的方法很简单,根据shazam算法中描述,就是将两个landmark组合在一起。最后利用提取的指纹从指纹库中检索得到结果。
(a) 立体图
(b) 平面图
图2 频谱图
2 FFT变换
FFT是很多音频算法中的第一步,算是一个算法预处理。可以采用的库有FFTW。如果采用openMP多线程编程,需要在配置fftw时指定—enable-openmp参数。具体的使用方法今后会详细介绍。
3求landmark
Landmark是频谱图中的一系列能量极大值点。根据shazam论文,能量极大值点的抗噪能力很强。求法多种多样,目的就是在二维平面中寻找峰值。通过调节参数可以控制每秒选取的landmark个数。一般情况下每秒保留20~30个点即可。
4 构造指纹
指纹的构造方法和shazam算法一样。首先针对每一个landmark都有一个targetzone。事实上,这个target zone就是一个landmark构造指纹的范围,这个也是人为指定的。然后,将landmark和target zone中的所有landmark两两组合,构成一个指纹。指纹由三部分构成:两个landmark的频率和时间差。同时每个指纹都有一个对应的时间,也即landmark的时间,表示这个指纹出现的时刻。
如果我们是从原始音乐库构造指纹库,提取的指纹就放入指纹库。指纹库可以用散列表实现,每个表项表示相同指纹对应的音乐id和time。如果我们是检索音乐,则利用提取的指纹访问指纹库。
图3 构造指纹
5 检索
检索是算法的核心,生成的指纹通过检索指纹库即可返回要检索的歌曲。根据前面的描述,生成的指纹可以放入散列表中,每一个表项都是相同指纹对应的音乐数据。音乐数据包括:音乐的id和该指纹在该音乐中出现的时间。
有了指纹库,当从用户传递的音乐片段到达服务器之后,首先对该片段提取指纹,然后将所有的指纹与散列表中的指纹进行匹配。当找到匹配的指纹后,获得该指纹对应的音乐的id和该指纹在该音乐中出现的时刻time。然后将提取的指纹对应的time减去从指纹库中获得的time得到一个时间差。最后将这些id和时间差进行排序:id放在long型数据的高位,时间差放在long型的低位,排序后的结果就是针对每个id都有一系列的时间差。
Shazam算法然后依据这样一个假设选择结果:要检索的片段肯定来自于某一首完整音乐从某个时刻开始的片段,而它们的生成的指纹应该相同,则对应的时间差也应该相同。所以排序完了之后就寻找含有最多相同时间差的音乐id即可。
算法的整体流程如上面所述,但是具体实现可以有不同的方案,不同的参数也会导致指纹数目和检索准确率的不同,而这些都需要不停地调试。
相关推荐
### 基于内容的音频检索研究:音乐分类与特征提取 #### 音频检索的重要性与挑战 在当今数字化时代,互联网与多媒体技术的飞速发展使得海量的多媒体信息触手可及,其中音频作为多媒体的重要组成部分,其数据量呈...
这个技术在音乐检索、版权保护、广告检测等方面有着广泛的应用。本篇将重点介绍如何利用Python进行音频指纹识别。 Python作为一种强大的编程语言,拥有丰富的库支持音频处理和机器学习任务,使得开发音频指纹识别...
### 基于小波包最优基的音乐指纹提取算法 #### 一、研究背景与意义 随着互联网的发展以及音频压缩技术的进步,大量的音乐资源在网络上得以传播和分享。这种趋势导致了一个新问题的出现——如何有效地管理和检索...
《基于GammaChirp倒谱系数和色度的鲁棒音频指纹》的研究旨在改进音频指纹识别技术,提高其稳定性和计算效率。音频指纹是一种能够唯一标识音频片段的紧凑型内容摘要,对内容变化敏感,同时对保留内容的处理具有耐受性...
数字音频指纹技术是一种基于内容的音频识别技术,它的...综上所述,数字音频指纹技术在内容管理和音乐检索领域发挥着重要的作用。随着技术的不断发展和完善,它将为音频数据的管理、分析和保护提供更为高效的解决方案。
盗版追踪系统基于数字指纹技术,一旦音频文件被非法分发或使用,系统可以通过比对指纹来定位盗版来源。这涉及到分布式监控网络和侵权行为检测算法。监控网络广泛分布于互联网上,持续抓取可能的侵权内容,然后通过...
基于音频指纹的音乐检索技术应用广泛,已经成为音乐识别领域的重要技术之一。 3. 云计算技术在音乐传播中的应用 云计算技术在音乐传播中扮演着重要角色。由于数字音乐的存储需要巨大的容量,云存储服务允许用户将...
检索指纹,对比指纹库以寻找匹配的乐谱;筛选结果,根据匹配度选择最合适的匹配;最后,算法实现是将这些理论方法转化为实际的计算机程序。 综上所述,这份报告深入研究了音乐信号处理中的核心技术,并在Android...
在IT行业中,音频指纹技术是一种重要的技术,常用于音乐识别、版权保护以及音频内容检索等领域。本项目聚焦于“RobustLandmarkBasedAudioFingerprinting”这一特定的音频指纹生成方法,采用MATLAB进行开发,这表明...
Audiorecognizer 是 shazam 算法在 Java 中的实现。shazam主要应用于基于指纹的音乐检索 。Audiorecognizer 可以很精准的识别上10种来自本地的或者网络的不同的MP3文件。
4. 存储与检索:将生成的音乐指纹存储在数据库中,当需要识别新的音乐片段时,系统会计算新片段的指纹并对比数据库,找到最相似的指纹,从而确定音乐的身份。 三、Client端的应用 配合Last.fm Fingerprinter的简单...
Echoprint的前身是Echo Nest音乐指纹(ENMFP),它基于音乐音频的详细分析。ENMFP的指纹基于多个连续片段的色度向量,对于匹配同一曲目不同编码非常有效,但当面临空中(OTA)录音时出现的更剧烈的频谱失真时,ENMFP...
在数字化时代,音频指纹技术作为一种高效、可靠的音频识别手段,已经广泛应用于音乐版权检测、音频检索、广告跟踪等领域。本文将深入探讨Audiate这一音频指纹项目,它是基于Java EE平台实现的,且有潜力支持C/C++等...
6. **音乐信息检索算法**:这类算法帮助用户快速找到特定的音乐,通过关键词搜索、歌曲指纹识别(如Shazam技术)等方式实现。 在项目描述中提到的结果表明,所使用的音乐算法在处理音乐数据时表现出了高效性。这...
总的来说,"歌曲相似度搜索.zip"项目展示了如何用C#实现一个基础的音乐搜索系统,虽然它仅基于歌曲名称,但在理解音乐信息检索和C#编程方面仍有一定的学习价值。对于想要扩展功能的开发者来说,可以考虑引入更复杂的...
dejavu_gi库是基于dejavu项目的一个版本,dejavu是一个广受欢迎的Python音乐识别框架,它能够根据音频的特性,如旋律、节奏等,生成独一无二的“音乐指纹”。这个指纹系统类似于图像识别中的特征提取,但针对的是...
本文将深入探讨基于Node.js的Echoprint服务器——"node-echoprint-server-master",这是一款在Linux环境下运行的程序,专注于音频指纹识别算法的实现。 一、Node.js与Echoprint Node.js是一个开源、跨平台的...
- 音频指纹可以用来匹配和检索这些元标签,使得用户可以基于音乐内容而不是文件名或其他间接信息来搜索音乐。 5. **开源软件**: - jFooID 作为开源软件,其源代码对公众开放,允许任何人在遵守许可证规定的条件...
Chromaprint.scala 是一个基于 JVM 的库,用于实现 Chromaprint AcoustID 音频指纹识别技术。Chromaprint 是 AcoustID 项目的一部分,它的主要目标是通过分析音频内容来创建独特的、可比较的指纹,从而帮助识别特定...