最近识别音乐技术比较流行,其实国外03年就开始陆续出现了很多算法和产品。国内最近盛大和百度才发布这种产品。其实声音指纹最核心的技术就是从原始声音文件中采集fingerprinter,然后通过算法分析fingerprinter,获取音乐的唯一标识,然后再去数据库中把这个音乐关系信息查询出来。
2. 安装配置MusicBrainZ
MusicBrainZ中使用了Amplifind来分析一段音乐的指纹,并有一个音乐数据库对外提供服务器。MusicBrainZ包含多种产品,例如picard,通过这些产品可以使用界面查询出歌曲已经关联的信息。但作为开发者更关注的是调用接口,这样可以在我们的应用中使用到musicBrainZ。我们使用libmusicbrainz最新版本是09-11发布的libmusicbrainz-3.0.2.tar.gz。
Libmusicbrainz3使用WebService对外提供服务,提供ruby、perl、python、C#/.Net 几种binding。
下载perl版本binding : http://search.cpan.org/~bfaist/WebService-MusicBrainz-0.93/以及依赖的一些模块:
XML::LibXML
LWP::UserAgent
Class::Accessor
URI
Test::More
执行安装
perl Makefile.PL
make
make test
make install
查看接口文档:http://users.musicbrainz.org/~luks/docs/libmusicbrainz3/
http://musicbrainz.org/doc/HowPUIDsWork
Musicbrainz3接口中并没有直接处理音乐文件的接口。目前找到的直接分析音乐文件的开发包只有musicIP(现在叫amplifind)公司的libofa和libsndfile ,这两款工具都是C开发的,后来在其他网站找到一个libofa的perl调用接口,叫做Audio::Ofa
Audio::Ofa::Util - Retrieve audio fingerprints and metadata for unknown audio files
安装Audio::Ofa::Util
安装过程一直报错,安装module:build 、xtUtils::PkgConfig,继续安装Audio:Ofa继续报错:
[root@cms5 Audio-Ofa-0.02_02]# perl Makefile.PL
# running Build.PL
Package libofa was not found in the pkg-config search path.
Perhaps you should add the directory containing `libofa.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libofa' found
at Build.PL line 8
*** can not find package libofa
*** check that it is properly installed and available in PKG_CONFIG_PATH
at Build.PL line 8
Couldn't run Build.PL: at /usr/lib/perl5/site_perl/5.8.5/Module/Build/Compat.pm line 335.
查看Build.PL,发现这句报错 my %pkg_info = ExtUtils::PkgConfig->find('libofa');
从googlecode中下载libofa代码,
安装碰到问题,尝试使用genPUID ,并搞清楚genPUID和libofa的关系。
able to be done by Picard, genPUID, MusicIP Mixer and other tools based around libofa
http://lists.musicbrainz.org/pipermail/musicbrainz-devel/2010-February/003708.html
http://wiki.musicbrainz.org/Talk:MusicIP
www.musicip.com redirects to www.amplifiedmusicservices.com and appears to 404 any other links that don't go to the ones as links on the main page. So what does this mean? 71.2.179.49 19:26, 1 December 2009 (UTC)
MusicIP has been [sold/merged/changed/acquired/foo] into Amplified Music Services. From what I understand Amplified Music Services has continued supporting the PUID technology that MusicBrainz uses, so the change has been fairly seamless to MusicBrainz' users. --navap 21:05, 1 December 2009 (UTC)
Caveat to the above: libofa still works, and genPUID still works, but they're no longer distributing genPUID, no longer creating new genPUID keys, and though they're still distributing it, they've recently updated the Mixer page to state that they're not going to support it.
proprietary closed source AmpliFIND "stuff" done only to generate a new PUID
一篇老文章:
http://blog.musicbrainz.org/?p=160 written by RobertKaye
安装文档:
http://cblfs.cross-lfs.org/index.php/Libofa
安装libofa之后,安装Audio:ofa过程出错:无法安装成功。Musicdns.org已经不存在,安装时url找不到 = 、
Unknown keyword 'URL' in '/usr/lib/pkgconfig/libofa.pc'
[root@cms5 Audio-Ofa-0.02_02]# vi /usr/lib/pkgconfig/libofa.pc
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libofa
Description: The Open Fingerprint Architecture Library
URL: http://www.musicdns.org/
Version: 0.9.3
Requires: fftw3
Libs: -L${libdir} -lofa -lexpat -lm
Cflags: -I${includedir}
2.1 获取PUID
在musicbrainz.org的论坛上看到一篇2010年7月份的帖子,帖子内容是关于PUID问题,大家都没办法解决。
http://forums.musicbrainz.org/viewtopic.php?id=2275
之前我们知道 genPUID是调基于libofa开发包来实现的,决定直接调用genPUID来实现,但musicip网站已经不存在了,在使用genPUID开发包之前,必须去网站注册一个key,在googlecode.com中libofa项目中发现了keys.txt,尝试着找出一个key,放在genPUID命令中使用,居然可以!下面黑体字就是我所需要的PUID.
[root@cms5 genpuid-1.4]# ./genpuid 57aae6071e74345f69143baa210bda87 -r \[beyonce\]Crazy\ in\ Love-Beyonce.mp3
GenPUID Version 1.4 - 31 October 2008
Copyright (C) MusicIP Corporation 2006-2008.
Checking files to be processed...
Songs to be scanned: 1
/home/xj_fingerprinter/module/genPUID-1.4/[beyonce]Crazy in Love-Beyonce.mp3
PUID: 52a317a6-c029-cd70-e0cf-462097bf8060
2.2 通过PUID调用meta Database
通过PUID获取Musicbrainz的元数据库中信息,有两种方式。一种是直接通过web service服务来获取;另一种为直接使用MusicBrainz提供的开发包,目前支持perl、python、rails、C#。
2.2.1 Web service 方式调用
Web Service 查询元数据库中信息,可以参考文档:
http://wiki.musicbrainz.org/Xml_Web_Service#Searching_Tracks
例如,通过上面文档中,我们了解到,根据PUID查询track信息,可以使用下面这个service
http://musicbrainz.org/ws/1/track?type=xml&puid=52a317a6-c029-cd70-e0cf-462097bf8060查询结果如下图所示,查询出PUID为“52a317a6-c029-cd70-e0cf-462097bf8060”的歌曲信息,歌名为”Crazy in love”,但有多个版本。
2.2.2 Perl module 方式调用
MusicBrainz公司提供了一套perl调用的方式,简化了分析数据的过程。模块名是:WebService::MusicBrainz 。
#!/usr/bin/perl
use WebService::MusicBrainz::Track;
my $ws = WebService::MusicBrainz::Track->new();
#my $response = $ws->search({ TITLE => 'Same in any language' });
my $response = $ws->search({ PUID => '52a317a6-c029-cd70-e0cf-462097bf8060' });
my $track = $response->track(); # grab the first one from list
print $track->title(), " - ", $track->artist()->name(), "\n";
上面这个例子,实现了跟web service一样的查询:通过PUID获取track信息。执行结果为下图显示。Web Service返回结果中Beyoncé是法文,UTF8转码不成功,看了下perl接口源代码,好像有点问题,待最后确认。
[xj_fingerprinter@cms5 ~]$ perl finger.pl
Crazy in Love (feat. Jay-Z) - Beyonc?
3. 大数据量测试
之前我们测试时使用的是一首英文歌曲,所以生成PUID,查询元数据库都很顺利。
接下来准备测试一些中文歌曲,观察结果。查询PUID时,歌曲名不能为中文,转为unicode也不行。相同歌曲文件用英文名可以查询到PUID的,中文就查不到。这个不是大问题,暂时忽略掉。下面测试都用非汉字歌曲名进行。
1、rain.wma(汪峰-在雨中)
结果:查询PUID失败。
2、chaorenbuhuifei.mp3(周杰伦新歌超人不会飞)
结果:查询PUID失败。
3、mir.mp3(王菲-传奇)
结果:查询到PUID为dd8505c1-9129-a864-48cb-1f15de4a160b
查询MusicBrainZ元数据库,内容为空。
http://musicbrainz.org/ws/1/track?type=xml&puid=dd8505c1-9129-a864-48cb-1f15de4a160b
4、pride.wma(梁静茹-勇气)
结果:查询PUID失败。但是用MusicBrainZ公司的picard产品就可以查询到元数据库中数据。
5、song.mp3(梁静茹-情歌)
结果:查询PUID为3f4e9986-983b-0437-d638-fce6b1471c36,元数据库中也有结果
http://musicbrainz.org/ws/1/track?type=xml&puid=3f4e9986-983b-0437-d638-fce6b1471c36
6、目前所有非mp3文件全部查询失败,选择一首英文wma歌曲,继续测试。
[black eyed peas]Sexy-Black Eyed Peas.wma
结果:未查询到PUID,genPUID目前不能直接处理非mp3格式文件。
7、移除第5个测试用例的ID3信息
结果:没有ID3信息的mp3格式歌曲,一样可以被查询到PUID,音乐文件被分析的过程跟ID3没有关系。
8、pretend you don’t see her(一首很老的英文歌)
结果:没有查找到PUID。
4. 解决中文文件名和非mp3文件问题
Genpuid目前不支持中文文件名和非mp3格式数据。接下来对这两个问题进行处理。
Mplayer可以把wma、wav、以及其他很多格式数据转为MP3,使用前需要安装Mplayer、Lame两个插件。分别安装lame、win32code、Mplayer:
1、lame下载
http://rpm.pbone.net/index.php3/stat/4/idpl/1807604/com/lame-3.96.1-2.guru.suse93.i686.rpm.html
2、win32code下载
http://rpm.pbone.net/index.php3/stat/4/idpl/1807644/com/w32codec-all-20050412-0.pm.0.i386.rpm.html
3、Mplayer
MPlayer-1.0rc2.tar.bz2
安装完毕后:
执行下面命令先把wma文件转为wav文件
/usr/local/MPlayer/bin/mplayer pride.wma -ao pcm -ao pcm:file=pride.wav
执行下面命令把wav文件转为MP3格式
lame -h pride.wav pride.mp3
注意:直接从wma转为MP3文件,会有严重失真现象,除了噪音什么都没了。
以后可以参考使用下面这个脚本来处理文件格式转换和中文文件名问题。
#!/bin/bash
DATE=$(date '+%m-%d-%Y')
TIME=$(date '+%H:%M:%S')
STARTLOCATION="$1"
# Start a new file
echo "Start converting at $DATE $TIME with PID $$" > /tmp/wma2mp3.$$
echo "OGG is better and free (SCNR)">> /tmp/wma2mp3.$$
# For encoding wma to mp3 (but ogg is much better ;-) )
for i in "`find "${STARTLOCATION}" -name *.wma -print `"
do
mplayer -ao pcm -aofile "${i%.wma}.wav" "$i" && lame -h "${i%.wma}.wav" "${i%.wma}.mp3"
# Use this for ogg:
#mplayer -ao pcm -aofile "${i%.wma}.wav" "$i" && oggenc "${i%.wma}.wav"
# If returncode == 0
if [ $? -eq 0 ];then
echo "\"${i}\" convertet to \"${i}.mp3\"" >> /tmp/wma2mp3.$$
rm "${i%.wma}.wav" && rm "${i}"
else
echo "failed decoding \"${i}\"" >> /tmp/wma2mp3.$$
fi
done
echo "Finished converting at $DATE $TIME with PID $$" >> /tmp/wma2mp3.$$
cat /tmp/wma2mp3.$$|mail -s "Files converted on ${DATE}" root
回顾之前碰到的所有wma格式文件查找PUID都失败的情况,现在我们可以把wma文件格式转换为MP3,继续查找PUID,结果查找到了!例如上面这个刚转换的pride.mp3文件。
PUID为:2691ef0a-6210-20b1-7172-f4dfd98843e3 ,(查询时间比较慢,花了10s)。通过web service 查看track 信息:
5. 总结
我们可以通过获取到不同格式音乐文件的PUID,音乐文件长度必须够长,测试过30s长度文件查找不到PUID,完整文件可以找到的情况。然后去MusicBrainZ的元数据库中查询出当前PUID关联的一些专辑、歌手等信息。整个调研过程有3个转折点
① 获取PUID过程
这步最为关键,没有PUID,什么都干不了。在MusicIP被AmpliFind公司收购以后,原有查询方法全部失效,官网上面已经找不到查询PUID服务的方法了。临时找的那个key暂时还可以访问查询PUID的服务,但新歌已经不能分配新的PUID了。根据一些相关新闻显示,很有可能某个时候AmpliFind公司彻底停止使用查找PUID的服务。因为AmpliFind提供PUID服务给MusicBrainZ公司,并从MusicBrainZ公司拿10%利润。
而MusicBrainZ公司的产品Picard,我们已经通过之前的流程实现了,不过不是GUI的。
② 调用MusicBrainZ的Web Service 或者直接使用Perl开发包,Perl开发包封装了 调用Web Service过程。通过上面两种方式可以查询PUID对应的专辑、歌手等信 息。这部分工作暂时没碰到什么障碍,都很简单实现,唯一未解决问题是处理一个法语歌手名时,会有乱码,中文、英文都没问题。这个问题我已经发信给开发包的作者,暂无回复,有时间尝试自己修改对方源代码确认一下原因。
③ 歌曲格式转换和中文文件名处理
这部分工作解决了命中率的问题。如果中文文件名或者wma格式都不能被GenPUID 处理,会大大降低使用的效果。
值得注意的问题是在转换音乐文件格式为mp3格式时,过程比较慢,大概需要消耗10s,有时候查询PUID的过程也比较慢,能查找到PUID情况下,查询速度在1-15s之间。如果查找不到PUID,等待时间更长,大概30s。
Shazam算法:
http://laplacian.wordpress.com/2009/01/10/how-shazam-works/
哥伦比亚大学的matlab提供的另外一种类似shazam的算法:
http://labrosa.ee.columbia.edu/~dpwe/resources/matlab/fingerprint/#1
分享到:
相关推荐
其0.9.3版本可能包含了针对音乐指纹算法的优化和改进,以便更高效地处理wma(Windows Media Audio)格式的音乐文件。wma是一种常见的音频压缩格式,由微软开发,具有较高的音质和压缩率,但在不同平台的兼容性上不如...
数字音乐指纹技术正是为了解决这一问题而诞生的一种高效手段。 #### 二、核心概念与原理 **1. 数字音乐指纹** 数字音乐指纹是指一段音乐的声学特征的紧凑表示形式,它可以被视为音乐的一个独特标识符。通过这一...
数字音频指纹技术是一种基于内容的音频识别技术,它的目的是从一段音乐中提取出能够代表其重要声学特征的紧致数字签名。这种技术的出现主要是由于互联网上音频信息量的急剧增加,尤其是在音乐领域。在这样的背景下,...
这种技术可以应用于保护数字音乐、数字电影、数字图书等数字作品的版权。同时,数字指纹也可以应用于其他领域,例如身份认证、数据加密等。 数字指纹是一种新型的版权保护技术,它可以保护数字作品的版权,并惩罚...
在IT领域,音频指纹识别是一种技术,用于标识和匹配音频片段,类似于图像识别中的数字指纹。这个技术在音乐检索、版权保护、广告检测等方面有着广泛的应用。本篇将重点介绍如何利用Python进行音频指纹识别。 Python...
声学指纹技术是一种在音频处理领域中广泛应用的技术,主要用于音频识别和内容检索。它通过将音频信号转换成一种独特、可比较的数字表示,类似于人类的指纹,因此得名“声学指纹”。这个名为“声学指纹包”的压缩文件...
总的来说,"清风重复音乐查找"是音乐管理领域的一个实用工具,它利用音频指纹技术解决了音乐重复的问题,提高了音乐库的整洁度。软件的易用性和高效性使得它成为音乐发烧友和专业DJ的理想选择。用户在使用过程中,...
而大数据技术的应用使得音频内容的搜索成为可能,音频指纹技术的出现使音频本身可以被充分分析,从而实现精准的音乐识别和索引。这种技术能够自动匹配与用户搜索音频相似度最高的音乐作品,有效弥补了传统文本搜索...
这里,我们将深入探讨涉及的关键知识点,包括数字指纹技术、盗版追踪机制、在线音乐网站的构建以及相关技术如Struts2和MySQL数据库。 首先,数字指纹(Digital Fingerprinting)是一种将原始数据转换为独特标识的...
二、音乐指纹技术 音乐指纹是另一种常用的技术,它能将音乐转换为独特的、可比较的数字指纹。这种技术首先对音乐进行预处理,如降噪、分帧、加窗等,然后提取出稳定的、反映音乐本质特征的“指纹”,如峰值点、频谱...
音乐快速识别服务,通常是指利用音乐识别技术快速确定用户正在听的音乐作品及其相关艺术家信息的服务。这种服务特别适用于那些在日常生活中经常接触音乐,却又无法立即识别出音乐作品信息的场景,比如在车内、家中、...
总之,【moto v8音乐雷达】是一款针对Moto V8手机的音乐识别和下载工具,它通过先进的音频指纹技术,帮助用户快速识别并获取喜爱的音乐,提升了手机的音乐体验。同时,其内置的音乐管理、下载和推荐功能,使得音乐...
曝光指纹成像门票的应用广泛,常见于大型活动、音乐会、体育赛事等场合,以防止票务欺诈和非法转让。此外,这种技术也可用于进入高安全区域,如数据中心或政府设施,提供额外的身份验证层。 总的来说,曝光指纹成像...
4.1 版权保护:音频指纹技术在音乐、电影等版权保护中起到关键作用,能有效防止未经授权的使用和传播。 4.2 广告监测:在广告投放中,通过音频指纹可以追踪广告在不同频道的播放情况,评估广告效果。 4.3 内容推荐...
【描述】: 这个主题主要探讨如何利用生物指纹技术来改进车辆的操作和安全性。在当前的智能交通系统中,汽车正逐渐转变为智能化、网络化的移动设备。通过集成生物指纹识别技术,可以实现无钥匙进入、一键启动等功能,...
音频指纹是一种独特的声音特征,可以将特定的音乐片段与数据库中的记录匹配。通过这种方式,即使文件的元数据丢失,MusicRepair也能准确地找到正确的信息。 2. **核心功能**: - **元数据修复**:当音乐文件的元...
Echoprint的设计使得其能够处理更广泛的音乐场景,包括那些传统指纹技术无法胜任的场景,例如处理经过空中录音等条件导致的频谱失真。 Echoprint算法是音乐识别技术领域的重要突破,因为它不仅解决了之前技术的局限...
《基于GammaChirp倒谱系数和色度的鲁棒音频指纹》的研究旨在改进音频指纹识别技术,提高其稳定性和计算效率。音频指纹是一种能够唯一标识音频片段的紧凑型内容摘要,对内容变化敏感,同时对保留内容的处理具有耐受性...