赞
踩
歌曲的相似度分析和听歌识曲原理核心思路基本一致,都是提取歌曲的声纹进行判断,提取声纹的方法,这里就要搬出我们大学学过的傅里叶变换了
关于傅里叶变换的普及,可以参考链接
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,这里需要说一下,我这里是直接存储的字符串结果,并没有压缩,所以实际压缩后甚至可以更小
接下来我们就看一下,为什么空间占用的差别在哪里
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。