当前位置:   article > 正文

【技术分析】使用python进行歌曲相似度分析_之所以需要对歌曲分块,就是为了记录歌曲的时间序列,如果直接对整个歌曲进行fft

之所以需要对歌曲分块,就是为了记录歌曲的时间序列,如果直接对整个歌曲进行fft

歌曲的相似度分析和听歌识曲原理核心思路基本一致,都是提取歌曲的声纹进行判断,提取声纹的方法,这里就要搬出我们大学学过的傅里叶变换了

关于傅里叶变换的普及,可以参考链接

https://www.cnblogs.com/h2zZhou/p/8405717.html

这里听歌识曲,是有一个比较出名的开源项目的,叫dejavu,GitHub的地址是,它的特点是识别快,可能只需要试听几秒钟,就可以准确的识别出源歌曲,但是缺点是占用空间较大,这里我做了一个测试,使用dejavu提取了5个歌曲的声纹,查询MySQL这个表的空间使用就有28M (29982720/1024/1024),基本相当于5首mp3歌曲的大小

为什么dejavu生成的歌曲指纹,这个我们后面再说,有没有相对比较节约空间的方法呢,也是有的(方案参考互联网,当然也离不开FFT,即傅里叶变换)

下面我想讲一下这个方法:

首先,我们要对整个歌曲进行分块,比如每秒100分块

其次,对每一个分块进行FFT,接着对频域的结果进行区间划分,取出每一个区间的最大值的坐标,这个坐标,就是歌曲片段的特征值

最后将特征值按顺序排列,就是整个歌曲的指纹了

如果需要对比两首歌曲的相似程度,只需要按顺序比较特征值的相似程度,根据相似度来判断即可

之所以需要对歌曲分块,就是为了记录歌曲的时间序列,如果直接对整个歌曲进行FFT,就损失了时间的关系,另外这个结果也非常的杂乱,有兴趣的可以试试,然后使用matplotlib输出结果图查看

这里我使用程序中导入了3首歌曲,提取了指纹,数据库的占用大小是278528bytes,0.26M,这里需要说一下,我这里是直接存储的字符串结果,并没有压缩,所以实际压缩后甚至可以更小

 

接下来我们就看一下,为什么空间占用的差别在哪里

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/112179
推荐阅读
相关标签
  

闽ICP备14008679号