我们常常会遭遇到这样的尴尬:在大街小巷邂逅一段熟悉的旋律,无奈又听不清歌词。遗憾也许这辈子就这样失之交臂了。

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

它的基本原理大家应该大概清楚:通过客户端Shazam录制采集十几秒的声音样本,通过网络将音乐信号发回 Shazam服务器,经过数据分析,很快便将该乐曲的相关信息发回手机。幸运的是我们找到了开发者的一份材料,进一步了解其中的计算方法。

通过GPS定位,在哪里听到这首歌
通过GPS定位,在哪里听到这首歌

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

Shazam 频谱取样示意图
Shazam 频谱取样示意图

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

Frequency in Hz Time in Seconds
823.44 1.054
1892.31 1.321
712.84 1.703
…… ……
819.71 9.943

哈希表可能如图所示

Shazam 采样点举例
Shazam 采样点举例

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

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

Shazam 检索示意图
Shazam 检索示意图

据悉,类似的技术最早由一家名为 Melodis 的公司推出,它推出的一款应用―― Midomi ,与 Shazam 相似。当然,也不乏基于电脑的应用,比如前不久测试的百度哼唱,是首次在国内推出的哼唱搜索引擎。 搜索引擎发展的趋势就是越来越简单,越来越以人为本。在搜索引擎刚起步的阶段你能想到我们可以在移动设备上语音搜索 Google Map 吗?现在,我们可以想象了,有一天我们摆脱了键盘、鼠标,我们用感官,用意念,遨游于整个互联网。

相关文章 《3G时代iPhone手机的多媒体应用 》[作者:赵宇为 ]

《百度MP3哼唱搜索功能上线 》[作者:新浪科技 ]