听歌识曲!python这个骚操作可以了解一下!
音频指纹识别的目的是确定音频的数字“摘要”。从而与音频样本进行比对得出它出自哪首歌曲,像现在QQ音乐、网易云音乐等各大音乐软件都有此功能,它根据歌曲的前两到五秒识别音乐歌名。今天我们用python来实现这一骚操作。
进群进群:700341555可以获取Python各类入门学习资料!
这是我的微信公众号【Python编程之家】各位大佬用空可以关注下,每天更新Python学习方法,感谢!
111111111111.png
image
Dejavu库
Dejavu用Python实现的音频指纹识别库,通过聆听音频并对其进行指纹识别来记忆音频。然后,通过将麦克风读取的音频与数据库中保存的音频指纹进行匹配,然后返回正在播放的歌曲的歌名。
一、安装
Dejavu可直接通过pip进行安装
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-weight: normal; font-stretch: inherit; font-size: 18px; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(93, 93, 93); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
[code]pip3 install Dejavu
</pre>
二、工作原理
dejavu库会读取音频文件,利用时频分析的方法得到不同时刻的频率分布,然后按照一定的算法将音频的指纹信息从音频文件的时频信息中提取出来。通过指纹信息来识别和区分声音文件,每个音频文件都有其单独的指纹库,比对指纹库可以根据声音片段以识别出整个音频文件,以达到听歌识曲的目的。
1
项目步骤
音频指纹识别系统有两个任务:
1、通过指纹识别来学习新歌
2、通过在学习歌曲的数据库中搜索未知歌曲来识别它们
1.从磁盘读取
通过本地读取音频文件,然后通过音频提取与比对进行歌曲识别,由于读取的文件与数据库中文件几乎一样,所以此项测试对系统准确率参考不大。
2.音频笔记本电脑麦克风
随机选择原始mp3文件中的音频进行播放,并让Dejavu通过麦克风收听。此外,我的朋友甚至在说话,我在整个过程中都哼了一声,只是为了引起一些噪音。
3.在我的iPhone上播放压缩的流式音乐
我通过我的iPhone扬声器播放音乐,Dejavu再次在我的MacBook话筒上收听来测试歌曲的识别率。
1
测试结果
以下是不同听音时间值(n)的结果:
image
对应准确率百分比:
image
%
从中我们可以看到,即使只有一秒钟,从歌曲的任何地方随机选择,Dejavu获得60%的正确率!一秒钟到2秒钟让我们达到96%左右,而100%只需要5秒或更长时间。老实说,当我自己测试这个时,这个结果还是很好的, 毕竟只听了1-2秒的一首歌的背景来识别是非常困难的。
示例代码
- cmd下 windows服务操作代码(可以写成bat文件,然后用batOS这个软件以静默模式包装一下)
- 移植gtk,这个配置有点早,可以了解一下他的工作流程
- EntityFramework Core是否可以映射私有属性呢?了解一下。
- python中的shelve模块,可以提供一些简单的数据操作
- 介绍“Razor”— ASP.NET的一个新视图引擎(落后了好多,需要用这个就了解一下)
- 想了解python的urllib2是怎么实现的,可以看pypy版本便于理解
- WiFi破解这个技术很普通!Python几行代码就可以做到!进来就学会
- <Python一下>Time操作
- 希望了解可用性和用户体验的简单发展 可以进来了解一下
- 用安装python模块出现error: command 'gcc' failed with exit status 1 ,实际已经安装了gcc的,还是报错,然后发觉是failed不是not found,这说明这个错误个gcc没多大关系,应该是缺少某些功能模块,执行如下操作:
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
- Python3——简单的了解和简单操作
- 选择器的朋友可以试试这个思路 延迟执行归并选择操作
- PyCharm中按住Alt键,可以选择一个指定列表,然后对这个数列进行操作,比如删除,增加等等
- 用这个也是便利进行历史操作也是可以 达到选择的 但是我还是觉得求摸的过程好用。
- 对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e "Pl
- delphi线程类【这个文章可以帮我们了解多线程编程】2
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-A
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-D
- 为什么你的python版本一团糟?因为少了这个操作!