对QQ音乐"听歌识曲"API的分析

2013-08-01 14:52:37 +08:00
 hxy060799
近来手机QQ音乐(iOS和Android)中出现了"听歌识曲"的功能.当听到中意的歌曲的时候,把手机的麦克风对准音响,并打开此功能,数秒之后便可以找到这首歌的歌名,歌手,专辑等信息,并可以同步显示歌词.为了了解这个看似神奇的功能的实现方式,便进行了简单的分析.

经过Google查找,没有找到任何关于这个接口的开发资料,所以只好进行抓包.

先是用Fiddler进行的,但是在设置了Fiddler代理以后,使用这个功能会莫名其妙的出现HTTP501错误,只好换Charles进行抓包.通过抓包,得到了它的请求地址:

http://proxy.music.qq.com/sound_print_r/search

通过POST传输二进制音频,服务器便会以json的形式返回结果.根据抓包分析,Request的Header中有一个Host属性,值为weixin.music.qq.com,使用接口的时候也要对这个属性进行设置,否者只会返回502 Bad Request.

写了一个简单的 iPhone App,传了几段MP3,却只得到了"无匹配结果"的返回,经分析发现,QQ音乐客户端在调用这个功能的时候,传输的音频采用了特殊的格式,对几次搜索的Request信息提取后分析,这种格式文件头如下:
00000000h: DD D0 D6 2C 1A A8 87 B5 89 62 82 3C 20 3B 41 30 ; 菪?.▏祲b? ;A0
00000010h: 0F 9C 4A A9 A3 13 2E BC FB D5 CA A4 80 E4 F5 28 ; .淛..见帐漉(
搜索以后没有找到相关的信息,也确定不下来这种文件的格式,所以只好到此为止.

不知是否有高手可以继续分析下去并且把这个"神奇"的接口应用起来.
11368 次点击
所在节点    程序员
12 条回复
notedit
2013-08-01 15:03:47 +08:00
不一定传输的是音频 你可以搜索一下 音频指纹 根据音频指纹然后再跟数据库对比 找出相识的歌曲

音频指纹提取的算法跟参数 你是很难获取的 除非你把他的代码获取到
ejin
2013-08-01 17:13:52 +08:00
http://www.midomi.com/ 哼唱搜搜,哼一下就知道是什么歌曲了,出来至少好几年了,快去分析下
CalifLove
2013-08-01 17:39:02 +08:00
@ejin 知道这个网站还是在2年前下载的SoundHound这个软件,个人觉得他网站比软件还好用,识别速度快,识别率非常高。
go
2013-08-01 17:52:59 +08:00
QQ音乐 识别度 感觉不高
wildog
2013-08-01 17:58:35 +08:00
zlbruce
2013-08-01 23:59:00 +08:00
Shazam 应用都出来好几年了。。。
LokiSharp
2013-08-02 01:09:09 +08:00
非中国歌曲, SoundHound 识别度是最高的
ETiV
2013-08-02 01:42:43 +08:00
盛大创新苑有个开源项目,就是哼唱搜索的。
可以搜一下

下面是我自己的理解:

音调跟频率有关,可以把收录到的波形图转成频谱图

再由频率分析出音调

根据音调的起伏,产生指纹(因为会有哼跑调或者根本哼不上去的时候,所以要考虑到容错)

再拿这个指纹从已收录的特征库里搜索,直至返回结果
est
2013-08-02 08:47:43 +08:00
@ETiV 最后一点是最有技术含量的。模糊匹配+海量索引不是谁都能做出来的。 MVP tree 这种数据结构还得自己写索引引擎。
ariza
2013-08-02 21:13:03 +08:00
Soundhound是最早嘛
astonysh
2014-08-03 17:22:17 +08:00
如果需要音乐/哼唱识别的api的话可以联系我
edmteam
2020-10-02 15:53:47 +08:00
@astonysh 你好,我需要音乐识别,VX8840919

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77665

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX