音频处理库—librosa的安装与使用

其实tensorflow自带了一些音频处理工具,用于处理一些任务,诸如可谓是,或者asr(使用ctc算法),以及其他先进的比如transformer或者高级别的识别技术。主要原理貌似现在还得基于mfcc。


目录

序言

一、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/),通过下面命令安装:


   
   
  1. tar xzf librosa-VERSION.tar.gz
  2. cd librosa-VERSION/
  3. python setup.py install

二、librosa常用功能

核心音频处理函数

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

音频处理

频谱表示

幅度转换

时频转换

特征提取

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

绘图显示

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


三、常用功能代码实现

读取音频


   
   
  1. >>> import librosa
  2. >>> # Load a wav file
  3. >>> y, sr = librosa.load( './beat.wav')
  4. >>> y
  5. array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,
  6. 8.12290182e-06, 1.34394732e-05, 0.00000000e+00], dtype=float32)
  7. >>> sr
  8. 22050

Librosa默认的采样率是22050,如果需要读取原始采样率,需要设定参数sr=None:


   
   
  1. >>> import librosa
  2. >>> # Load a wav file
  3. >>> y, sr = librosa.load( './beat.wav', sr= None)
  4. >>> sr
  5. 44100

可见,'beat.wav'的原始采样率为44100。如果需要重采样,只需要将采样率参数sr设定为你需要的值:


   
   
  1. >>> import librosa
  2. >>> # Load a wav file
  3. >>> y, sr = librosa.load( './beat.wav', sr= 16000)
  4. >>> sr
  5. 16000

提取特征

提取Log-Mel Spectrogram 特征

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


   
   
  1. >>> import librosa
  2. >>> # Load a wav file
  3. >>> y, sr = librosa.load( './beat.wav', sr= None)
  4. >>> # extract mel spectrogram feature
  5. >>> melspec = librosa.feature.melspectrogram(y, sr, n_fft= 1024, hop_length= 512, n_mels= 128)
  6. >>> # convert to log scale
  7. >>> logmelspec = librosa.power_to_db(melspec)
  8. >>> logmelspec.shape
  9. ( 128, 194)

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

提取MFCC特征

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


   
   
  1. >>> import librosa
  2. >>> # Load a wav file
  3. >>> y, sr = librosa.load( './beat.wav', sr= None)
  4. >>> # extract mfcc feature
  5. >>> mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc= 40)
  6. >>> mfccs.shape
  7. ( 40, 194)

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

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

绘图显示

绘制声音波形

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


   
   
  1. >>> import librosa
  2. >>> import librosa.display
  3. >>> # Load a wav file
  4. >>> y, sr = librosa.load( './beat.wav', sr= None)
  5. >>> # plot a wavform
  6. >>> plt.figure()
  7. >>> librosa.display.waveplot(y, sr)
  8. >>> plt.title( 'Beat wavform')
  9. >>> plt.show()

输出图形为:

绘制频谱图

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


   
   
  1. >>> import librosa
  2. >>> import librosa.display
  3. >>> # Load a wav file
  4. >>> y, sr = librosa.load( './beat.wav', sr= None)
  5. >>> # extract mel spectrogram feature
  6. >>> melspec = librosa.feature.melspectrogram(y, sr, n_fft= 1024, hop_length= 512, n_mels= 128)
  7. >>> # convert to log scale
  8. >>> logmelspec = librosa.power_to_db(melspec)
  9. >>> # plot mel spectrogram
  10. >>> plt.figure()
  11. >>> librosa.display.specshow(logmelspec, sr=sr, x_axis= 'time', y_axis= 'mel')
  12. >>> plt.title( 'Beat wavform')
  13. >>> plt.show()

输出结果为:

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


   
   
  1. >>> import librosa
  2. >>> import librosa.display
  3. >>> # Load a wav file
  4. >>> y, sr = librosa.load( './beat.wav', sr= None)
  5. >>> # extract mel spectrogram feature
  6. >>> melspec = librosa.feature.melspectrogram(y, sr, n_fft= 1024, hop_length= 512, n_mels= 128)
  7. >>> # convert to log scale
  8. >>> logmelspec = librosa.power_to_db(melspec)
  9. >>> plt.figure()
  10. >>> # plot a wavform
  11. >>> plt.subplot( 2, 1, 1)
  12. >>> librosa.display.waveplot(y, sr)
  13. >>> plt.title( 'Beat wavform')
  14. >>> # plot mel spectrogram
  15. >>> plt.subplot( 2, 1, 2)
  16. >>> librosa.display.specshow(logmelspec, sr=sr, x_axis= 'time', y_axis= 'mel')
  17. >>> plt.title( 'Mel spectrogram')
  18. >>> plt.tight_layout() #保证图不重叠
  19. >>> plt.show()

输出结果为:

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

参考:http://librosa.github.io/librosa/index.html

很多人都是这样写安装过程的,但往往会有报错,报错的话,可以是包自身版本的原因,也可能是系统原因,python版本原因,对于librosa这个包的安装来说,安装的时候,老说gcc或者llvm等等之类的报错,安装的其他依赖库比如numba等等也在一直强调版本,包括其他人也在强调python版本。其实librosa这个包一直在官网更新,可是你要知python是一个开源项目,很多包在开发的过程中都是基于一定的系统环境的,无法满足所有版本,系统配置要求,所以往往会报错。这点对于类似于pycuda以及numba等等其他一些需要编译的包,情况更加突出。

综合以上判断,librosa这个包也是很讲究版本对应的,不管是其依赖包,系统版本,python版本,gcc等等,一个可行的方案是不断总结,尝试,然后去找可能的解决办法,顺着别人的足迹一步步找到正确的,可以看看评论,可行的安装办法。

pip还是很讲究的,比conda考虑周全,但是只使用裸的pip可能会导致一些环境过于死板,不够灵活,但conda就比较灵活了,可以自由修改或者管理环境。有时候一直报错,很可能是你的版本不对,或者是源不对也有可能,根本就没有你需要的东西,一定要灵活找到解决方案。pip也是需要在c盘隐藏文件夹下面安装点东西的,使用超级权限的时候,也可以多试几次,等一等,重启一下,系统原因,调节下配置参数,保障软件正确运行。

安装使用librosa,使用python3.6以上好像会容易得多。

更多参考

https://blog.csdn.net/martin1243/article/details/122230158
https://blog.csdn.net/qq_39516859/article/details/80333431
https://www.freesion.com/article/9186468972/
https://blog.csdn.net/leilei7407/article/details/105578151
https://blog.csdn.net/weixin_40128276/article/details/79194144
https://blog.csdn.net/weixin_42511373/article/details/116555238
https://blog.csdn.net/weixin_30461129/article/details/116555243
https://blog.csdn.net/qq_23869697/article/details/107200729
https://blog.csdn.net/qq_38699252/article/details/120361511
https://www.pianshen.com/article/50751095772/
https://blog.51cto.com/u_151787/2521803

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值