zoukankan      html  css  js  c++  java
  • 人工智能下的音频还能这样玩!!!!

    人工智能音频处理库—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.gz
    cd librosa-VERSION/
    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.读取音频

    # # 2020-11-9
    # # 李运辰
    #导入库
    import librosa
    # # 读取音频
    # Load a wav file
    y, 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)
    



    2.提取特征

    提取Log-Mel Spectrogram 特征

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

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

    可见,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 feature
    mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40)
    print(mfccs)
    print(mfccs.shape)
    

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

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



    4.绘图显示

    4.1绘制声音波形

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

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


    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()
    


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

    # # 将声音波形和频谱图绘制在一张图表中:
    # extract mel spectrogram feature
    melspec = librosa.feature.melspectrogram(y, sr, n_fft=1024, hop_length=512, n_mels=128)
    # convert to log scale
    logmelspec = librosa.power_to_db(melspec)
    plt.figure()
    # plot a wavform
    plt.subplot(2, 1, 1)
    librosa.display.waveplot(y, sr)
    plt.title('sample wavform')
    # plot mel spectrogram
    plt.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()
    

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

    正文结束!!!

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

    记录学习python的点点滴滴;

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

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

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

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    LoadRunner12 Java Vuser API语法举例
    Java代码封装redis工具类
    Java代码redis基础操作
    Git提交代码失败: empty ident name (for <>) not allowed
    Ubuntu 16.04 root环境变量不生效问题解决方案
    Jenkins中使用GitLab的配置
    gitlab搭建与配置说明
    移动端网页开发经验总结 (不断更新ing)
    移动端开发注意事项(转载)
    电脑上调试手机网站的几种方法
  • 原文地址:https://www.cnblogs.com/chenlove/p/14038546.html
Copyright © 2011-2022 走看看