0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

是否可以将Shazam称为有听歌识曲功能应用的鼻祖?

电子工程师 来源:lq 2019-02-18 09:43 次阅读

是否可以将 Shazam 称为有听歌识曲功能应用的鼻祖?

2018 年 9 月,苹果最终以 4 亿美金完成对 Shazam 公司的收购,让不少人为之振奋,在当时对外公布的一份声明中可以看到,自Shazam应用登陆App Store以来,是其最受欢迎的iOS应用之一。

其实早在苹果 iPhone “出道”之前,Shazam 提供的音乐识别服务和技术就已戳中了不少用户的痛点。例如,当外界播放一首你喜爱的歌曲时,手机应用能识别出该歌曲并调出手机内同样的歌曲/原唱,完成后在手机上播放出来。

像最早流行的 Gracenote、SoundHound、Track ID、Tunatic,以及如今的第三方音乐 App 如 QQ音乐、网易云音乐,甚至微信“摇一摇”等也都具备音乐识别的功能。

只不过,据资料显示,在Shazam 公司 1999 年成立之初,以非常“原始”的方式提供服务的:“用户听到歌曲,打一个服务短号码,让电话那头听到,然后自动挂断,歌曲信息以短信的形式发到用户手机上。”

如今,无论被收购之后的 Shazam 是因何种战略地位为苹果生态提供服务,与其他类似的音乐识别软件在操作界面、细节功能有哪些不同,Shazam 仍受到大众的认可。抛开此前与苹果的关系、服务能力不提,Shazam 在音频识别上的技术能力得到公认的。

实际上,早在 2003 年 Shazam 联合创始人之一的 Avery Li-Chun Wang 就发表了一篇论文“An Industrial-Strength Audio Search Algorithm”(《一种工业级音频搜索算法》),提出了基于指纹(fringerprint)的音乐搜索算法,因其检索准确率较高,得到了不少算法工程师的关注。

编者注:来自维基百科:声学指纹(Acoustic fingerprint)是通过特定算法从音频信号中提取的一段数字摘要,用于识别声音样本或者快速定位音频数据库中的相似音频。

根据论文资料,Shazam 设计了一套非常灵活的音频搜索引擎。其算法抗噪声和扰动能力强,计算复杂度低,同时具有很高的可扩展性。即使外界噪音很强,它也可以迅速通过手机录制的一小段压缩音频从百万级的曲库中辨识出正确的歌曲。该算法运用分析音频频谱上的星状图来组合时间-频率信息构造哈希,从而可以将混合在一起的几首歌都辨识出来。此外,针对不同的应用,即使曲库非常大,检索速度也能达到毫秒级。

其核心简言之是,用户将某段音频中的一个片段上传至 Shazam,Shazam 会首先提取指纹,然后查询数据库,最后利用其精准的识别算法返回歌名。指纹可以看做该音频的哈希值(Hash),一个带有时间属性的数字集合。

2015 年,一位名叫 Christophe 的工程师写了篇万字长文,完整分析了Shazam的原理是什么,并表示,在过去的三年时间里,他用了大概 200 个小时来理解信号处理的概念,其背后的数学原理,并制作了自己的Shazam原型。他甚至直言:“写这篇文章是因为此前从没有找到一篇真正理解 Shazam 的文章”。

那么,如何更快更好理解 Shazam 背后的算法奥秘呢?前不久,YouTube上一个专门普及工程知识的频道 Real Engineering 上传了一段 10 分钟视频,可帮助人们快速 Get 到相关知识点。

传送门:https://www.youtube.com/watch?v=kMNSAhsyiDg

相比起人类,计算机对音乐没有直观的理解,它只能将歌曲与其数据库中的其他歌曲进行对比匹配。为此,视频中 Real Engineering 重点提及了两个概念:“星状图”和“哈希函数”,并对基于“指纹”的搜索算法进行了通俗化解释。

例如,人类大脑可很容易区分钢琴和吉他的音色,但对计算机来讲,就需要一种能够量化这些特征以便进行识别的方法,即频谱图,一种声音的视觉显示。

在视频中,研究者尝试用一张三维图来表示:x 轴代表时间,y 轴代表频率,z 轴代表振幅/响度(通常用某种颜色表示)。

如此,计算机就可以通过这个三维图来识别声音并存储数据。不过,会有个问题:频谱图中有大量这样的数据,而且数据越多,需要通过计算匹配的时间就越长。

所以,减少计算时间的第一步就是减少分类歌曲的数据。

Shazam 采用的称之为“指纹”的技术,可将这些频谱图转换成看起来像的“星状图”。

每颗星星代表特定时间最强的频率。如此,不仅降低了频谱图的维度,还减少了图表上数据点的数量。

然后,Shazam 数据库中的每首单曲都以“指纹”的形式存储起来。

当用户打开 Shazam 应用时,后台将访问手机的麦克风,并创建一组接收到的声波“指纹”。不过,这种方式也有助于应用过滤噪声,因为它只会创建突出频率的数据点。

音频创建完成,并将其发送到服务器。此时,Shazam的识别过程正式开始,即“快速组合哈希”(Fast Combinatorial Hashing)。

论文链接:https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf

Shazam 会将“指纹”进行分类,并搜索在该音频中的某个特定时间点里分别存在哪几个音符,这也是哈希表的可搜索地址。

注:在计算机领域,哈希和哈希函数应用十分广泛。例如,在谷歌的搜索引擎算法中就应用了哈希函数,以确保文件可被下载。一句话解释就是,任意长度的输入通过哈希函数变换成固定长度的输出,该输出就是哈希值。

实践中,输入可以是一小段文字如密码,也可以是像整部电影一样的长数据流。

为免枯燥乏味,视频里还举了个生动的例子:在图书馆如何通过搜索书的标题确定书的位置?

可以通过哈希函数来决定,书的标题为输入,书架的位置为输出。在这个过程中,我们会遇到书籍不均匀分布、书目冲撞、以及如何快速找到所需书目的问题。

例如,如果图书馆只有两个架子,那么书目冲撞(一个书架上有相同标题的书)的问题将十分突出;但如果图书馆有十亿书架,那哈希函数得出的书目冲撞结果应该会很小。

回到以上提到的案例,如果通过哈希函数,选择两组频率数据,分别除以时间并作为输入,输出的数字介于 1 至 10 亿之间。

首先,计算机将浏览歌曲数据库并计算每个锚点(anchor point)的哈希;一首歌曲将包含多个锚点,将有助于计算机对音频片段按锚点、后面的以及之间的频率进行分类。

然后,对每个锚点按哈希进行排列。

这些地址同样以歌曲 ID 和时间戳进行分类。

如此,便可以更快定位,并找到本来需要多个锚点才能找到的音乐。

以上只是大致介绍,想要了解 Shazam 听歌识曲背后的详细原理,可以查看Christophe 写的万字长文。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1528

    浏览量

    71622
  • 数据库
    +关注

    关注

    7

    文章

    3590

    浏览量

    63363
  • 音频识别
    +关注

    关注

    0

    文章

    3

    浏览量

    7242

原文标题:一个App卖了4亿美元,这家听声识曲公司为何得到Apple的青睐?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    电感绕线是否可以随便绕

    电子发烧友网站提供《电感绕线是否可以随便绕.docx》资料免费下载
    发表于 03-29 14:44 1次下载

    STM32H755外设是否互锁功能

    1: STM32H755 是双核 M7 和 M4 假设M7 在访问一个外设时,M4在这一时刻能否访问。 2: STM32H755 外设是否互锁功能
    发表于 03-29 08:42

    是否可以客户端控件与CYW920706WCDEVAL一起使用?

    是否可以客户端控件与CYW920706WCDEVAL一起使用? 我想用它来发现蓝牙 BR/EDR,然后将其与其他设备配对。 客户端控制的下载链接或文档吗? 另外,你
    发表于 03-01 15:54

    CY8CMBR3110触摸芯片,是否可以支持自动复位功能,具体哪些操作方式?

    CY8CMBR3110触摸芯片,是否可以支持自动复位功能,具体哪些操作方式? 使用该产品的实际工况是在触摸按键上会盖上一层玻璃盖,调试中发现盖上玻璃盖以后触摸按键就失效了。 我们尝试
    发表于 02-18 08:38

    TC299模块中是否任何功能可以用作RTC?

    嗨, TC299 模块中是否任何功能可以用作 RTC?
    发表于 01-26 06:42

    6RA70是否自动锁相功能

    请问是否自动锁相这个功能,和它原理
    发表于 01-10 07:38

    请问AD7712是否低通滤波和陷波的功能

    求AD7712详细引脚介绍,AD7712是否低通滤波和陷波的功能,第一次用AD7712,之前AD也用的少,网上资料都是英文的,有的说可编程滤波截止,有的说可编程第一个陷波,有点乱,谢谢!
    发表于 12-13 09:19

    差动放大电路中,同相和反相端的输入信号是否可以互换?

    差动放大电路中,同相和反相端的输入信号是否可以互换? 在差动放大电路中,同相和反相端的输入信号是可以互换的,但是互换后会对放大电路的功能和性能产生一些影响。在下面的文章中,我将详细解释
    的头像 发表于 11-20 16:24 660次阅读

    并行eeprom是否可以实现gal芯片功能

    如果不考虑速度的话,他俩能否实现相同的功能,比如通过地址输入信号,数据数据,是否可以实现
    发表于 10-07 07:15

    K210是否可以模型分层实现?

    请问各位 是否可以模型分层实现,实现的思路大概如何。是先训练好模型,分层转换为kmodel,依次实现各层kmodel,还是导出整体kmodel后,可以获得各层输出。
    发表于 09-15 06:17

    是否可以使用MCUXpresso SDK的标准API函数来解决问题?

    已经运行良好,我可以使用 MCUXpresso SDK 的标准 API 函数,但我不了解当我想使用 4 位模式时如何完成交易。 在这种情况下,在第一个控制字从 1 位 FDX 传输到 4 位 HDX
    发表于 06-09 06:00

    是否可以使用ESP8266数据流传输到PC上的文件中?

    一个设备,可以在设备运行时数据日志发送到闪存驱动器。 是否可以使用 ESP8266 数据
    发表于 06-02 07:51

    是否可以rdimm模块连接到1046ardb?

    是否可以 rdimm 模块连接到 1046ardb。使用 ls1046afrwy 中的 ddr_unit.c 不允许设备启动。
    发表于 06-01 06:16

    是否可以esp用作连接其他设备的从机?

    (一种用于 esp,一种用于其他设备)。每次我向其他设备发送消息(esp 的 CS 设置为高电平)时,下一次与 esp 的通信都会失败。 有没有人遇到过类似的问题?是否可以 esp 用作连接其他设备的从
    发表于 05-31 07:15

    是否可以900/1800天线用于ESP?

    Mhz 上运行。所以我的问题是我是否可以 900/1800 天线用于 ESP? 在产品描述 (900/1800) 中提到它们适用于 ESP8266。虽然 2400Mhz 天线也可用,但在描述中提到它们适用于 Wi-Fi 应用
    发表于 05-12 06:39