听歌识曲,我想大家都不陌生。虽然不同的厂商识别率不同(可能是因为版权的原因),但是每个音乐APP都会有这么一个功能。我们以扣扣音乐为例,扣扣音乐听歌识曲功能比较丰富,不仅有基本的听歌识曲还有哼唱识别,识别到对应的歌曲后就直接返回对应的结果,如下图所示。

这里我们只关注听歌识曲部分,这一功能通常使用音频指纹(Audio Fingerprinting)实现。其主要流程大致可以分为两步:1)离线的音频指纹提取;2)在线的音频指纹匹配。音频指纹,顾名思义,和人类的指纹类似,从音频信号中提取唯一确定性的指纹,可用于识别音频样本或快速定位音频数据库中的类似项目。

音频指纹离线提取

音频指纹也是音频的一种特征,常用的提取方式也有三种:1)基于频带能量的音频指纹;2)基于landmark的音频指纹;3)基于神经网络的音频指纹。不管是哪种方式提取音频指纹都需要满足以下条件:时间局部性、平移不变性、鲁棒性和充分熵。

基于频带能量的音频指纹很好理解,就是把音频每一帧划分成一个一个子带,计算子带能量,然后进行差分处理,最后进行二值化来减少指纹内存占用大小,经过上述步骤之后我们就得到了基于频带能量的音频指纹。

​第二种是基于landmarks的音频指纹,这种方法的思想是音频中能量较大的部分不容易受到干扰,因此具有较好的鲁棒性。其流程大致可以分为以下几个步骤:首先记录在一定范围内能量比其它时频点都高的点对应的坐标(Fig 1A->Fig 1B);在匹配时如果直接用坐标图按照滑动窗口的方式进行对比的话计算量太大了,因此需要一个简单快速的方法,我们选定一个锚点,每个锚点对应一个目标区域,锚点与目标区域中的坐标进行哈希运算得到的值

​第三种就是遇事不决深度学习了,得益于深度学习强大的特征提取能力,我们可以用神经网络提取音频指纹,类似于一个embedding的过程,这里就不展开讲了。

音频指纹在线匹配

我们这里使用基于Landmarks的算法提取音频指纹。每个音频指纹的结构为{哈希:时间偏移}。指纹中的每个哈希用于在数据库中搜索匹配的哈希。对于在数据库中找到的每个匹配哈希,从指纹和数据库文件开始的相应偏移时间形成时间对,然后把这个时间对和歌曲ID分到对应的直方图的bin中。当遍历完整个数据后,我们得到了,每个bin内一组时间对代表样本和数据库声音文件之间关联的散点图。当匹配到数据库中文件时,散点图具有类似对角线的pattern,如下图所示

当没有匹配到时则没有类似的pattern。

Performance

我们选了如下的9首歌,然后把《一路向北》第一段的副歌剪切一部分作为听歌识曲的目标。

​算法的结果如下所示,正确匹配到了《一路向北》这首歌,并且定位到的时间是88.928s


本文相关代码,在公众号语音算法组菜单栏点击Code获取。


参考文献:

[1]. http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=152C085A95A4B5EF1E83E9EECC283931?doi=10.1.1.103.2175&rep=rep1&type=pdf

[2]. https://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf

[3]. https://arxiv.org/pdf/2010.11910.pdf

[4]. https://ryuk17.blog.csdn.net/article/details/80461049

[5]. https://ryuk17.blog.csdn.net/article/details/80461049

基于音频指纹的听歌识曲系统相关推荐

  1. 下一代听歌识曲技术——从信号处理到深度学习

    音乐丰富我们的生活:音乐传达人类的情感:音乐表达人类的艺术.人类文明的进程中离不开音乐这个载体,音乐也离不开人类的真情创作.在听到好听却没听过的歌曲时,如何快速准确得到该歌曲的歌名成为当务之急.Liv ...

  2. 基于音频指纹技术的微信“摇一摇搜歌”和QQ音乐“听歌识曲”

    摘要: 逛商场时想知道广播里放的好听的歌是什么?听到音乐想跟着唱,想不起歌词怎么办?这些问题都通过微信"摇一摇搜歌"和QQ音乐"听歌识曲"帮您解决! 逛商场时想 ...

  3. shazam 音频指纹 听歌识曲 原理(附代码)

    shazam 音频指纹 听歌识曲 原理 如何用java来实现shazam? 几天以前我读了一篇论文 :How shazam works?(shazam的工作原理) 这让我有了自己写一个java版本的s ...

  4. atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 1.音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能。 铃声 功能。。 音频切割(按

    atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能. 铃声 功能.. 音频切割(按照副歌部分 ...

  5. atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能。 铃声 功能。。 音频切割(按照副歌部

    atitit 音频 项目 系列功能表 音乐 v3 t67.docx Atitit 音频 项目 系列功能表 音频 音乐 语言领域的功能表 听歌识曲功能 酷我功能. 铃声 功能.. 音频切割(按照副歌部分 ...

  6. python指纹识别算法_shazam听歌识曲算法解析+python实现-2 生成指纹

    听歌识曲是如何工作的,看完这个你就懂啦! 使用的算法是<An Industrial-Strength Audio Search Algorithm>,部分算法借鉴了Github的dejav ...

  7. 人工智能在音乐领域的应用概述(1)---听歌识曲

    人工智能是当前.也将成为未来相当长时间的热门领域.本文概括其在音乐领域的垂直应用.作为交叉学科,该领域需要有一定数理基础,特别是傅里叶变换变体.卷积运算.动态规划算法(特别是Viterbi算法)和各种 ...

  8. Chrome插件:网易云音乐听歌识曲

    大家好,我是若川.持续组织了8个月源码共读活动,感兴趣的可以 点此加我微信ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. Chrome插件:云音乐听歌识曲

    当你用网页在视频网站刷视频的时候,有没有碰到过一个 BGM 激起你内心的波澜,而你却不知道它的名字.此时只能打开手机进行听歌识曲,而通过一个浏览器的插件却更容易解决这个问题.不需要繁琐的掏出手机,也不 ...

最新文章

  1. 非标准配置linux,剖析非标准波特率的设置和使用于Linux操作系统中
  2. Qt中内存泄露和半自动内存管理
  3. C++Eratosthenes埃氏筛法获取素数列表的实现算法(附完整源码)
  4. Map 的Properties集合存储IO流对象
  5. SkyEye携手Simulink实现全数字协同仿真
  6. 机器学习之决策树_CART算法
  7. [C++] printf 打印 string 类型
  8. 两个一样的图像相除会怎么样_【壮凌自动化分析】一种动力电池生产中基于图像运动模糊的速度检测方法...
  9. 用有道ip地址查询接口的详细方法
  10. Laravel报错:Whoops, looks like something went wrong.
  11. Android的代码同步repo
  12. proteus单片机仿真入门攻略(含元器件名称及它的图形)
  13. js,vue 上传图片前压缩图片(无损压缩,保持在2M以内)
  14. 手写签名制作电子签名详细步骤
  15. 极化码:极化码的单项式码(Monomial Codes)表示
  16. Echarts安装失败
  17. VirtualBox安装黑群晖并建立smb共享目录的方法
  18. WEB 前端开发插件整理
  19. flutter 资料整理
  20. 开源OA办公平台搭建教程:O2OA+Arduino实现物联网应用(五)

热门文章

  1. Git 提交常见问题总结
  2. 好久能旅游?新加坡,一座惬意的城市
  3. [SL] Silverlight + WCF Demo项目
  4. 好强的谷歌插件,不用写代码就能爬虫!
  5. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
  6. 艾尔登法环绝配:iGame加推双风扇白色版RTX 3050
  7. 从0到1,看职场小白如何用H5编辑器实现自我逆袭!
  8. Mac 安装 双系统 体验极差的好几天
  9. Google浏览器被搜狗篡改怎么恢复?
  10. 详细讲解vue2组件通信(一)——父传子props