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.读取音频

    #导入库
    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

    正文结束!!!

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/chenlove/p/15168901.html
Copyright © 2011-2022 走看看