python绘画音频_人工智能下的音频还能这样玩!!!!

48058f8f00a5a454ff53b409eb01a3eb.png

人工智能音频处理库—librosa(安装与使用)

序言

一、libsora安装

pypi

conda

source

二、librosa常用功能

核心音频处理函数

音频处理

频谱表示

幅度转换

时频转换

特征提取

绘图显示

三、常用功能代码实现

读取音频

提取特征

提取Log-Mel Spectrogram 特征

提取MFCC特征

绘图显示

绘制声音波形

绘制频谱图

序言

Librosa是一个用于音频、音乐分析、处理的python工具包,一些常见的时频处理、特征提取、绘制声音图形等功能应有尽有,功能十分强大。本文主要介绍librosa的安装与使用方法。

一、libsora安装

Librosa官网提供了多种安装方法,详细如下:

pypi

最简单的方法就是进行pip安装,可以满足所有的依赖关系,命令如下:

pip install librosa

conda

如果安装了Anaconda,可以通过conda命令安装:

conda install -c conda-forge librosa

source

直接使用源码安装,需要提前下载源码(https://github.com/librosa/librosa/releases/),通过下面命令安装:

tar xzf librosa-VERSION.tar.gzcd librosa-VERSION/python setup.py install

二、librosa常用功能

核心音频处理函数

这部分介绍了最常用的音频处理函数,包括音频读取函数load( ),重采样函数resample( ),短时傅里叶变换stft( ),幅度转换函数amplitude_to_db( )以及频率转换函数hz_to_mel( )等。这部分函数很多,详细可参考librosa官网 http://librosa.github.io/ librosa/core.html

音频处理

f7da95cfdb86d4c8b2afd8a5dc06e733.png

频谱表示

407e48a7c6a7c9feb78be25b996a238c.png

幅度转换

559431544a7364efa8f7f0db29cac9e2.png

时频转换

b29b37cc24a0fba155cccc0b2e2ae606.png

特征提取

本部分列举了一些常用的频谱特征的提取方法,包括常见的Mel Spectrogram、MFCC、CQT等。函数详细信息可参考http:// librosa.github.io/librosa/feature.html

2129b200dcccd301b516c0ee7caf5d1a.png

绘图显示

包含了常用的频谱显示函数specshow( ), 波形显示函数waveplot( ),详细信息请参考http://librosa.github.io/librosa/display. html

9cb62b17753be077f6bf83e6680a07fe.png

三、常用功能代码实现

1.读取音频

# # 2020-11-9# # 李运辰#导入库import librosa# # 读取音频# Load a wav filey, sr = librosa.load('./sample.wav')print(y)#Librosa默认的采样率是22050,如果需要读取原始采样率,需要设定参数sr=None:print(sr)y, sr = librosa.load('./sample.wav',sr=None)#可见,'beat.wav'的原始采样率为16000。如果需要重采样,只需要将采样率参数sr设定为你需要的值:print(sr)y, sr = librosa.load('./sample.wav',sr=18000)print(sr)

fa447258ace33319eb00d76effec11bf.png

2.提取特征

提取Log-Mel Spectrogram 特征

Log-Mel Spectrogram特征是目前在语音识别和环境声音识别中很常用的一个特征,由于CNN在处理图像上展现了强大的能力,使得音频信号的频谱图特征的使用愈加广泛,甚至比MFCC使用的更多。在librosa中,Log-Mel Spectrogram特征的提取只需几行代码:

# # 提取特征# Load a wav filey, sr = librosa.load('./sample.wav', sr=None)# extract mel spectrogram featuremelspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)# convert to log scalelogmelspec = librosa.power_to_db(melspec)print(logmelspec.shape)

f324e33a68d8e2b63550daa3a9af5856.png

可见,Log-Mel Spectrogram特征是二维数组的形式,128表示Mel频率的维度(频域),100为时间帧长度(时域),所以Log-Mel Spectrogram特征是音频信号的时频表示特征。其中,n_fft指的是窗的大小,这里为1024;hop_length表示相邻窗之间的距离,这里为512,也就是相邻窗之间有50%的overlap;n_mels为mel bands的数量,这里设为128。

3.提取MFCC特征

MFCC特征是一种在自动语音识别和说话人识别中广泛使用的特征。关于MFCC特征的详细信息,有兴趣的可以参考博客http:// blog.csdn.net/zzc15806/article/details/79246716。在librosa中,提取MFCC特征只需要一个函数:

# # 提取MFCC特征# extract mfcc featuremfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40)print(mfccs)print(mfccs.shape)

3d4ef302213849166b29645c3abbcc53.png

关于mfcc,这里就不在赘述。

Librosa还有很多其他音频特征的提取方法,比如CQT特征、chroma特征等,在第二部分“librosa常用功能”给了详细的介绍。

4.绘图显示

4.1绘制声音波形

Librosa有显示声音波形函数waveplot( ):

# # 绘图显示import librosa.displayimport matplotlib.pyplot as pltget_ipython().run_line_magic('matplotlib', 'inline')plt.figure()librosa.display.waveplot(y, sr)plt.title('sample wavform')plt.show()

aae637cf467899db05cde2dfd9e26bb4.png

4.2绘制频谱图

Librosa有显示频谱图波形函数specshow( ):

# # 绘制频谱图melspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)logmelspec = librosa.power_to_db(melspec)plt.figure()librosa.display.specshow(logmelspec, sr=sr, x_axis='time', y_axis='mel')plt.title('sample wavform')plt.show()

06bb01c9518e37b83553388a2a3eac57.png

将声音波形和频谱图绘制在一张图表中:

# # 将声音波形和频谱图绘制在一张图表中:# extract mel spectrogram featuremelspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)# convert to log scalelogmelspec = librosa.power_to_db(melspec)plt.figure()# plot a wavformplt.subplot(2, 1, 1)librosa.display.waveplot(y, sr)plt.title('sample wavform')# plot mel spectrogramplt.subplot(2, 1, 2)librosa.display.specshow(logmelspec, sr=sr, x_axis='time', y_axis='mel')plt.title('Mel spectrogram')plt.tight_layout() #保证图不重叠plt.show()

8d79812d0d0c359376e38a7663538371.png

dbe575aff1e83d0def8316fef827e9a4.png

到这里,librosa的安装和简单使用就介绍完了。事实上,librosa远不止这些功能,关于librosa更多的使用方法还请大家参考librosa官网http://librosa.github.io/librosa/index.html

正文结束!!!

f4b130dac8fa2eb04742643451504b5c.png

欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章

记录学习python的点点滴滴;

回复【开源源码】免费获取更多开源项目源码;

公众号每日更新python知识和【免费】工具;

本文已同步到【开源中国】、【腾讯云社区】、【CSDN】;

830014a6b774263eaa57f621c2371b50.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保存到数据库乱码mysql_Linux下MySQL保存进去数据为乱码的解决办法

MySQL默认的字符编码是latin1,而我用的是utf-8,存入数据库就变成了?????这样的乱码,解决方法:1、windows下:修改my.ini文件,有两处default-character-setlatin1都改为default-character-setutf8重启既可。2、linux下:vi /etc…

Oracle创建表_01

1、 --创建表 create table zctest( id number(9) not null primary key, classname varchar2(40) not null) 2、 3、 转载于:https://www.cnblogs.com/dbskill/p/5407146.html

mySQL数据库中的备份代码_MySQL中的备份数据库

我目前正在学习SQL。我在windows 10-cmd上运行mysql 8.0.16cli,我以root mysql用户身份登录,并以管理员身份运行cmd。我想做的是备份我新创建的数据库。这是我的显示数据库输出:mysql> show databases;--------------------| Database |--------------------| information_s…

网页版四则运算(未全部完成)

这次作业一直在做,一直在拖着,总感觉心里亏欠点什么,但是人就是这样,一件事情本来做起来就没有太多成功的几率,就想着延长工期,那就一直拖着吧,拖得时间越久你就会越发清晰地意识到自己已经非常…

webapp 微信开发适配问题

文章摘自:http://www.cnblogs.com/oksite/p/4630462.html 前段时间由于公司要做微信app 前端主要有我一个人独立开发 分享一下自己独立开发微信app的一些经验 首先说下 适配兼容的问题; 主要的问题还是安卓手机参差不齐,每个手机都有自带一个…

python安装copy_python中copy和deepcopy 的区别

请简述赋值, 深拷贝和浅拷贝的区别?(python中如何拷贝一个对象?)直接赋值(li1 li): 只传递对象的引用, li1指向对象li的内存地址空间,因此, 原有列表li改变, 被赋值的li1也会做相应的改变.浅拷贝:li和li2的内存地址不同,但是子…

iOS中的小知识点

1.tableView隐藏滚动条 self.tableView.showsVerticalScrollIndicator NO; 2.关于属性 使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等) 使用copy: 对NSStri…

一个DataGridView辅助类

DataGridView是在用C#做windows界面程序时常用到的控件,DataGridView的功能非常多,用起来也非常复杂 例如1. 我想在每行前面显示行编号,则需要先设置RowHeadersVisible为true,然后,在添加RowPostPaint事件,而RowPostPaint写起来也大同小异,这就非常没有必要.期望一个DataGridVi…

java单例设计模式_Java设计模式之单例模式详解

在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过。我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以这篇文章对…

java 压缩文件夹_java 实现压缩文件(单文件 或 文件夹)

接着上篇了解一下java压缩实现过程,下面的是支持 单文件 或 文件夹 压缩的实现,使用递归。效果:代码:package com.gx.compress;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;imp…

学习笔记day5:inline inline-block block区别

1. block元素可以包含block元素和inline元素;但inline元素只能包含inline元素。要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条规律是不适用的。比如 P 元素,只能包含…

java处理中文字符串_Java实现读取文章中重复出现的中文字符串

在上个星期阿里巴巴一面的时候,最后面试官问我如何把一篇文章中重复出现的词或者句子找出来,当时太紧张,答的不是很好。今天有时间再来亲手实现一遍。其实说白了也就是字符串的处理,所以难度并不是很大。以下是代码和运行效果&…

python的collection系列-默认字典(defaultdict)

默认字典,能定义默认值为其他类型 1 #dic1 {}2 #dic1["k1"].append("kkkkk") #正常情况会报错3 #print(dic1)4 5 import collections6 dic collections.defaultdict(list) #指定字典的值为列表7 dic["k1"].append("…

jquery获取java对象的属性_jQuery - 获得内容和属性

jQuery - 获得内容和属性jQuery 拥有可操作 HTML 元素和属性的强大方法。jQuery DOM 操作jQuery 中非常重要的部分,就是操作 DOM 的能力。jQuery 提供一系列与 DOM 相关的方法,这使访问和操作元素和属性变得很容易。提示:DOM Document Objec…

用border画三角形

<html> <head> <title>用border画三角形</title> <style>#one{width:0px;height:0px;margin:0 auto;border-top:50px solid white;border-right:50px solid white;border-bottom:50px solid orange;border-left:50px solid white;} </style&g…

iOS9适配(包括APNs)的改变

https://github.com/ChenYilong/iOS9AdaptationTips转载于:https://www.cnblogs.com/zkzzkz/p/5426658.html

javascript知识点记录(2)

1.js 异步加载和同步加载 异步加载模式也叫非阻塞模式&#xff0c;浏览器在下载js的同时&#xff0c;同时还会执行后续的页面处理&#xff0c; 在script标签内&#xff0c;用创建一个script元素&#xff0c;并插入到document中&#xff0c;这样就是异步加载js文件了 //以前的一…

java form的时间格式_SpringMvc接收日期表单提交,自动转换成Date类型方法

User中有birthday(Date)属性&#xff0c;用户注册的时候&#xff0c;选择日期即可&#xff0c;然后提交表单&#xff0c;可spring mvc 报错&#xff0c;400 Bad Request意思是不能把字符串转为Date类型的。实体类中加日期格式化注解DateTimeFormat(pattern "yyyy-MM-dd&q…

Groovy安装与入门实例

Groovy安装与入门实例 摘自: http://blog.csdn.net/dc_726/article/details/8576205 1 Groovy是什么&#xff1f; 来看下官网的介绍&#xff1a;http://groovy.codehaus.org Groovy... is an agile and dynamic language for the Java Virtual Machine builds upon the stren…

Ubuntu设置为命令行登录

rootubuntu:~# vi /etc/default/grub 改: 11 #GRUB_CMDLINE_LINUX_DEFAULT"quiet splash"12 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash text" rootubuntu:~# update-grub rootubuntu:~# reboot 转载于:https://www.cnblogs.com/mylinux/p/5437543.html