IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

SHAZAM音乐旋律云搜索(云计算云存储应用midomi,百度哼唱)

光头老蒋 2011-02-11 22:54:52 累计浏览 3,090 次
本机暂存

    记得有个大家记歌词的节目,很火爆,通过旋律快速找到歌曲,旋律搜索有多少用处呢?我们常常会遭遇到这样的尴尬:在大街小巷邂逅一段熟悉的旋律,无奈又听不清歌词。遗憾也许这辈子就这样失之交臂了。

    不必懊恼,Shazam 是一款能够识别音乐讯号的应用。相信不少朋友对它并不陌生。它在 iPhone 和 Andriod 手机里出现的频率很高,诺基亚的某些手机甚至预装了这样一款软件。

    它的基本原理就是通过采集十几秒的声音样本,通过网络将音乐信号发回 Shazam公司,经过数据分析,很快便将该乐曲的相关信息发回手机。你对此一定不满足,幸运的是我们找到了开发者的一份材料。

    我们都知道,一段音乐信号可以通过频谱图表示。横轴表示时间,纵轴为频率,另一个轴表示强度,即一个三维的频谱。那么,一条水平线代表一段连续的音频,垂直线代表一个瞬间的白噪声。如下图,图中的每一个点都代表特定时间点的频率强度,即为选定的"锚点"。图中的红色标记代表该时间点声音强度的峰值。

原图已失效

    由开发者的材料看,他们大约是每秒提取 3 个锚点。然后,他们会把收集到的信息建成一个哈希表(Hash table),其键值就是频率。当 Shazam 收到一段音频,以下图为例,它会以第一个键值,即 823.44 Hz 搜索匹配项。

原图已失效

    哈希表可能如图所示:

原图已失效

    他们不只是标注频谱的一个点,而是一个点对,每个峰值加了第二次锚点,即一个散列的两个点的频率,这样就能减少搜索时因噪声干扰而可能产生的误差。

    接下来就是检索的过程了,如果一段音频多次匹配,就会自动坚持这些频率所对应的时间是否与哈希表一致。当两个音频近似时,这些锚点连成一条连线,如果能检测出这条线,就说明音频匹配。

原图已失效

    据悉,类似的技术最早由一家名为 Melodis 的公司推出,它推出的一款应用―― Midomi ,与 Shazam 相似。当然,也不乏基于电脑的应用,比如前不久测试的百度哼唱,是首次在国内推出的哼唱搜索引擎。不过由于技术问题,推出时间可能要到2011年下半年了。 Midomi和shazam的搜索在美国用的人不多,倒是中国市场贡献了1/4的点击量,人多力量大啊。

     说到语音的搜索,shazam号称收录的音乐曲目为7万,而midomi则有超过10万首歌,天文数字,传统的数据库搜索是无法完成的。只有使用使用云计算云存储的方式解决。

     举例:使用类似BIGTABLE的半结构化数据库记录每首哥的旋律:

    原图已失效

    搜索方式采用数状结构:根服务器,从根音823.44赫兹开始,到第二个记录音的音频小于800则进入server A进行搜索,如此类推,进入到第三或者第四层时,搜索匹配的数据在几千个,大大缩短了收索时间,也将海量收索的负载平均分配下去。

     期盼在视频搜索上也能有如此的突破,将来的世界通过声音,动作就能进行控制。

同分类推荐文章

  1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
  2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
  3. 除法的意义 (2026-04-12 20:52:17)

查看更多 算法 文章 →

建议继续学习

  1. 如何成为OpenStack工程师 (累计阅读 15,957)
  2. Facebook 网站架构 (累计阅读 11,109)
  3. MacBook Air与工作效率 (累计阅读 10,659)
  4. 腾讯php程序员面试题目答案 (累计阅读 8,970)
  5. 分布式系统的事务处理 (累计阅读 7,382)
  6. PHP Extension开发基础 (累计阅读 6,643)
  7. 如何设计用户登录 (累计阅读 6,642)
  8. MySQL 5.6 测试之 Replication(主从复制) (累计阅读 6,267)
  9. 正则表达式的与或非 (累计阅读 5,868)
  10. 用 redis 实现和保护 12306 (累计阅读 5,623)