从零搭建音乐识别系统(一)整体功能介绍

13 篇文章 12 订阅
10 篇文章 0 订阅

从零搭建音乐识别系统(一)整体功能介绍_程大海的博客-CSDN博客

从零搭建音乐识别系统(二)音频特征提取_程大海的博客-CSDN博客_音乐特征提取

从零搭建音乐识别系统(三)音乐分类模型_程大海的博客-CSDN博客

从零搭建音乐识别系统(四)embedding特征提取模型_程大海的博客-CSDN博客

从零搭建音乐识别系统(五)embedding特征提取模型验证_程大海的博客-CSDN博客

代码地址:https://github.com/xxcheng0708/AudioEmbeddingExtraction


        从零开始搭建一个音乐识别系统总共分几步,简单画了一个草图:

        总结一下,大概分为以下四步:

        1、训练一个分类模型,用于识别一段音乐是否是音乐,如果是音乐才继续进行识别,如果不是音乐则停止识别,这可以带来两个方面的好处。一是可以降低一定的计算量;二是可以降低误识别

        2、使用度量学习相关方法,训练一个提取音乐片段embedding向量的模型,理想情况下,相似的歌曲片段的embedding之间具有更高的相似度,从而可以根据embedding相似度进行识别

        3、基于训练好的分类模型和embedding特征模型,把需要识别的歌曲文件都转换成对应的embedding特征向量,构成一个歌曲的embedding特征库

        4、对于一个新的歌曲片段,使用分类模型和embedding特征模型提取embedding特征向量,然后和特征库中保存的embedding所有特征向量之间进行相似度匹配,返回满足相似度阈值的识别结果。

        在后续博客中,会依次介绍歌曲文件预处理、梅尔频谱特征提取、分类模型训练、embedding特征提取模型训练、embedding向量库构建、向量库检索,以及在模型训练中遇到的一些问题。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Audio-Fingerprinting 是一个音乐指纹识别系统,使用的语言为 JAVA,同时需要用到 MySQL 数据库(虽然不是必须的,但这个系统采用他保存指纹和音乐信息)。他包含了指纹生成,数据库存储,和简易的服务器和客户端。他通过生成和记录音乐指纹,能够识别来自麦克风、文件等各个来源的音乐,并且有很高的抗噪性,同时他对文件属性和音乐质量不敏感。你可以使用服务器给手机或者其他程序提供音乐识别服务。你可以根据需求调节里面的参数,当前参数是为了在较短时间识别来自极大噪声和失真的音源,1500个左右的文件将产生接近24000000个指纹数 据。如果你只用于识别文件并且没有严重的噪声与失真,你可以修改参数,1个文件只需要少量指纹就可以识别,对于噪声较低的音源10s 200个指纹已经满足大多需求。简易使用方法需要安装MySQL,并执行Fingerprint. sql, 同时你可能需要修改max_allowed_packet参数,因为添加歌曲需要发送较大的包,我采用的参数是32M。修改MysqlDB中的数据库信息为你的数据库信息,如:private final String url = "jdbc:mysql://127.0.0.1:3306/musiclibary?user=yecheng"; private final String user = "yecheng"; private final String password = "yecheng";添加文件的方法:Ps:你可以重写添加的方法或者制作脚本或者直接使用其他软件实现转码功能,目前他能够从%title%}}%album%}}%artist%的文件名中获得信息。将文件转码为WAV,采样率为8000。调用Insert,参数为文件名或者文件夹。搜索音乐你可以调用Search 文件名搜索。在数据库较大的情况推荐采用运行Server,使用Client 文件名搜索。主要参数介绍Fingerprint:NPeaks:一个周期中每个子带的峰值点的个数 fftSize:FFT的窗口大小 overlap:FFT的窗口重叠大小 C:一个周期包含多少个窗口 peakRange:取峰值点时与多大范围的邻居比较 range_time:取点对的时候的时间范围,单位为秒 range_freq:取点对的时候的频率范围,单位为频率 Band:分成的子带,值对应FFT产生的数组索引 minFreq:最小频率 maxFreq:最大频率 minPower:最小能量修改的建议:提高识别率:减小minPower, 增加Band、NPeaks、range_time降低数据量:增大minPower,减小Band、NPeaks、rang_time其中建议先修改Band和minPower。Server:port:服务器的端口Client:ip:服务器的ip port:服务器的端口性能与效果数据量:音乐库为1500首歌,指纹数量为24000000个左右,服务器稳定后占用内存约340M。速度:处理器i7-3632QM,添加1500首歌用时约1919秒,一首歌约用时1.3秒。使用服务器查找10s的歌曲用时约0.2秒(不考虑客户端读取文件的时间)。准确度:对噪声较低的音频有很高的识别率,对噪声较高的也有接近商用的准确率,但是相对来说如果对于未出现在曲库的歌曲,也有一定的误报率。抗噪性:能够抵抗较强的失真和噪声,可以参考我给的测试音频。工作原理参考文档:ShazamMel scale本算法实现类似Shazam,首先我计算出音频的频谱图,将频谱根据频率分成若干子带,对每个子带查找若干个峰值点,本算法子带划分基于Mel频率。将获得的峰值点根据频率、时间范围组成点对。本算法的取点对频率范围为在子带内,其目的在于减少点对的数目并且提高分布式能力。取点对的时间范围为1s-4s。你可以根据需要修改这些参数。 标签:Audio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值