<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】librosa音頻處理教程

          共 9089字,需瀏覽 19分鐘

           ·

          2022-05-19 22:31

          Librosa簡介

          Librosa是一個 Python 模塊,用于分析一般的音頻信號,是一個非常強(qiáng)大的python語音信號處理的第三方庫,根據(jù)網(wǎng)絡(luò)資料以及官方教程,本文主要總結(jié)了一些重要且常用的功能。

          #?安裝
          !pip?install?librosa
          Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
          Requirement already satisfied: librosa in f:\programdata\anaconda3\envs\tf\lib\site-packages (0.8.1)
          Requirement already satisfied: scikit-learn!=0.19.0,>=0.14.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (0.24.2)
          Requirement already satisfied: joblib>=0.14 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (1.1.0)
          Requirement already satisfied: packaging>=20.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (21.3)
          Requirement already satisfied: numpy>=1.15.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (1.19.5)
          Requirement already satisfied: pooch>=1.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (1.5.2)
          Requirement already satisfied: decorator>=3.0.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (4.4.2)
          Requirement already satisfied: audioread>=2.0.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (2.1.9)
          Requirement already satisfied: resampy>=0.2.2 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (0.2.2)
          Requirement already satisfied: scipy>=1.0.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (1.5.4)
          Requirement already satisfied: soundfile>=0.10.2 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (0.10.3.post1)
          Requirement already satisfied: numba>=0.43.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from librosa) (0.53.1)
          Requirement already satisfied: setuptools in f:\programdata\anaconda3\envs\tf\lib\site-packages (from numba>=0.43.0->librosa) (58.0.4)
          Requirement already satisfied: llvmlite<0.37,>=0.36.0rc1 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from numba>=0.43.0->librosa) (0.36.0)
          Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from packaging>=20.0->librosa) (3.0.6)
          Requirement already satisfied: appdirs in f:\programdata\anaconda3\envs\tf\lib\site-packages (from pooch>=1.0->librosa) (1.4.4)
          Requirement already satisfied: requests in f:\programdata\anaconda3\envs\tf\lib\site-packages (from pooch>=1.0->librosa) (2.26.0)
          Requirement already satisfied: six>=1.3 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from resampy>=0.2.2->librosa) (1.15.0)
          Requirement already satisfied: threadpoolctl>=2.0.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from scikit-learn!=0.19.0,>=0.14.0->librosa) (3.0.0)
          Requirement already satisfied: cffi>=1.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from soundfile>=0.10.2->librosa) (1.15.0)
          Requirement already satisfied: pycparser in f:\programdata\anaconda3\envs\tf\lib\site-packages (from cffi>=1.0->soundfile>=0.10.2->librosa) (2.21)
          Requirement already satisfied: certifi>=2017.4.17 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from requests->pooch>=1.0->librosa) (2021.5.30)
          Requirement already satisfied: charset-normalizer~=2.0.0 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from requests->pooch>=1.0->librosa) (2.0.7)
          Requirement already satisfied: idna<4,>=2.5 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from requests->pooch>=1.0->librosa) (3.3)
          Requirement already satisfied: urllib3<1.27,>=1.21.1 in f:\programdata\anaconda3\envs\tf\lib\site-packages (from requests->pooch>=1.0->librosa) (1.26.7)
          import?numpy?as?np?
          import?pandas?as?pd?
          import?os

          import?IPython.display?as?ipd

          加載音頻文件

          import?librosa
          audio_data?=?'data/Data_MGTV/angry/audio_1027.wav'
          x?,?sr?=?librosa.load(audio_data)
          print(x.shape,?sr)
          (45159,) 22050
          x
          array([-0.11979394, -0.10811259, -0.04991762, ..., ?0.00769441,
          ? ? ? ?0.00752225, ?0. ? ? ? ?], dtype=float32)
          print('x:',?x,?'\n')
          print('x?shape:',?np.shape(x),?'\n')
          print('Sample?Rate?(KHz):',?sr,?'\n')
          print('Check?Len?of?Audio:',?np.shape(x)[0]/sr)
          x: [-0.11979394 -0.10811259 -0.04991762 ... ?0.00769441 ?0.00752225
          ?0. ? ? ? ?]

          x shape: (45159,)

          Sample Rate (KHz): 22050

          Check Len of Audio: 2.048027210884354

          讀取時長

          d?=?librosa.get_duration(y=x,?sr=22050,?S=None,?n_fft=2048,?hop_length=512,?center=True,?filename=None)
          d
          2.048027210884354

          采樣率

          sr?=?librosa.get_samplerate(audio_data)
          sr
          16000

          去除兩端沉默

          audio_file,?_?=?librosa.effects.trim(x)
          print('Audio?File:',?audio_file,?'\n')
          print('Audio?File?shape:',?np.shape(audio_file))
          Audio File: [-0.11979394 -0.10811259 -0.04991762 ... ?0.00769441 ?0.00752225
          ?0. ? ? ? ?]

          Audio File shape: (45159,)

          播放音頻

          IPython.display.Audio 可以讓我們直接在 jupyter notebook 中播放音頻,比如下面包房一段音頻

          ipd.Audio(audio_data)

          波形圖

          在這里,我們繪制了一個簡單的音頻波形圖。波圖讓我們知道給定時間的音頻響度。

          %matplotlib?inline
          import?sklearn
          import?matplotlib.pyplot?as?plt
          import?librosa.display

          plt.figure(figsize=(20,?5))
          librosa.display.waveplot(y,?sr=sr)
          plt.show()

          Spectogram

          頻譜圖(Spectogram)是聲音頻率隨時間變化的頻譜的可視化表示,是給定音頻信號的頻率隨時間變化的表示。'.stft' 將數(shù)據(jù)轉(zhuǎn)換為短期傅里葉變換。STFT轉(zhuǎn)換信號,以便我們可以知道給定時間給定頻率的幅度。使用 STFT,我們可以確定音頻信號在給定時間播放的各種頻率的幅度。

          Spectrogram特征是目前在語音識別和環(huán)境聲音識別中很常用的一個特征,由于CNN在處理圖像上展現(xiàn)了強(qiáng)大的能力,使得音頻信號的頻譜圖特征的使用愈加廣泛,甚至比MFCC使用的更多。

          X?=?librosa.stft(x)
          Xdb?=?librosa.amplitude_to_db(abs(X))
          plt.figure(figsize=(20,?5))
          librosa.display.specshow(Xdb,?sr=sr,?x_axis='time',?y_axis='hz')
          plt.colorbar()
          plt.show()
          librosa.display.specshow(Xdb,?sr=sr,?x_axis='time',?y_axis='log')
          plt.colorbar()

          梅爾頻率倒譜系數(shù)(MFCC)

          信號的梅爾頻率倒譜系數(shù) (MFCC) 是一小組特征(通常約為 10-20),它們簡明地描述了頻譜包絡(luò)的整體形狀。在 MIR 中,它經(jīng)常被用來描述音色。

          #mcc
          mfccs?=?librosa.feature.mfcc(y=x,?sr=sr)
          mfccs
          array([[-1.47507828e+02, -1.39587173e+02, -1.63085953e+02, ...,
          ? ? ? ?-3.51147095e+02, -3.62041565e+02, -3.64722260e+02],
          ? ? ? [ 1.39314545e+02, ?1.28688156e+02, ?1.26540642e+02, ...,
          ? ? ? ? 1.31368317e+02, ?1.23287079e+02, ?1.06071014e+02],
          ? ? ? [-5.88899651e+01, -7.76861572e+01, -8.52756119e+01, ...,
          ? ? ? ?-3.08440018e+01, -3.50476532e+01, -3.22384949e+01],
          ? ? ? ...,
          ? ? ? [ 1.24901953e+01, ?2.48859482e+01, ?3.59340363e+01, ...,
          ? ? ? ?-3.30873656e+00, -5.68462515e+00, -5.88594961e+00],
          ? ? ? [-6.10755301e+00, -8.72181129e+00, -3.69202137e+00, ...,
          ? ? ? ?-2.46745777e+00, -7.76338100e+00, -8.60360718e+00],
          ? ? ? [-1.22752495e+01, -8.53678513e+00, -2.76085877e+00, ...,
          ? ? ? ? 6.47896719e+00, ?9.00872326e+00, -3.04730564e-01]], dtype=float32)
          mfccs.shape
          (20, 89)

          在這個例子中,mfcc 在 89 幀中計算了 20 個 MFCC。

          第一個 MFCC,第 0 個系數(shù),不傳達(dá)與頻譜整體形狀相關(guān)的信息。它只傳達(dá)一個恒定的偏移量,即向整個頻譜添加一個恒定值。因此,很多情況我們可以在進(jìn)行分類時會丟棄第一個MFCC。

          librosa.display.specshow(mfccs,?sr=sr,?x_axis='time')

          過零率

          過零率(zero-crossing rate,ZCR)是指一個信號的符號變化的比率,例如信號從正數(shù)變成負(fù)數(shù),或反過來。這個特征已在語音識別和音樂信息檢索領(lǐng)域得到廣泛使用,是分類敲擊聲的關(guān)鍵特征。為真時為1,否則為0。在一些應(yīng)用場景下,只統(tǒng)計“正向”或“負(fù)向”的變化,而不是所有的方向。

          n0?=?7000
          n1?=?7025
          plt.figure(figsize=(14,?5))
          plt.plot(x[n0:n1])
          plt.show()
          zero_crossings?=?librosa.zero_crossings(x[n0:n1],?pad=False)

          zero_crossings.shape
          (25,)
          zero_crossings.sum()
          2

          可以使用整個音頻來遍歷這個并推斷出整個數(shù)據(jù)的過零。

          zcrs?=?librosa.feature.zero_crossing_rate(x)
          print(zcrs.shape)
          (1, 89)
          plt.figure(figsize=(14,?5))
          plt.plot(zcrs[0])
          []

          [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-pakxb1Os-1651758177390)(https://mmbiz.qlogo.cn/mmbiz_png/1FD1x61uYVdHWBWhQKLKptH3N9aicoJkXTUxeNaFAgV1cWuKOZpkrWPNQYgZk6ibOXm0AE60DkOvCibLtEI0by0cQ/0)]

          頻譜質(zhì)心:Spectral Centroid

          頻譜質(zhì)心(維基百科)表示頻譜能量集中在哪個頻率上。這就像一個加權(quán)平均值:

          其中 S(k) 是頻段 k 處的頻譜幅度,f(k) 是頻段 k 處的頻率。

          spectral_centroids?=?librosa.feature.spectral_centroid(x,?sr=sr)[0]
          spectral_centroids.shape
          (89,)
          frames?=?range(len(spectral_centroids))
          t?=?librosa.frames_to_time(frames)
          import?sklearn
          def?normalize(x,?axis=0):
          ????return?sklearn.preprocessing.minmax_scale(x,?axis=axis)
          librosa.display.waveplot(x,?sr=sr,?alpha=0.4)
          plt.plot(t,?normalize(spectral_centroids),?color='r')
          []

          頻譜帶寬:Spectral Bandwidth

          librosa.feature.spectral_bandwidth 可以用來計算p-order頻譜帶寬:

          其中 S(k) 是頻段 k 處的頻譜幅度,f(k) 是頻段 k 處的頻率,fc 是頻譜質(zhì)心。當(dāng) p=2 時,這就像一個加權(quán)標(biāo)準(zhǔn)差。

          spectral_bandwidth_2?=?librosa.feature.spectral_bandwidth(x+0.01,?sr=sr)[0]
          spectral_bandwidth_3?=?librosa.feature.spectral_bandwidth(x+0.01,?sr=sr,?p=3)[0]
          spectral_bandwidth_4?=?librosa.feature.spectral_bandwidth(x+0.01,?sr=sr,?p=4)[0]
          librosa.display.waveplot(x,?sr=sr,?alpha=0.4)
          plt.plot(t,?normalize(spectral_bandwidth_2),?color='r')
          plt.plot(t,?normalize(spectral_bandwidth_3),?color='g')
          plt.plot(t,?normalize(spectral_bandwidth_4),?color='y')
          plt.legend(('p?=?2',?'p?=?3',?'p?=?4'))

          頻譜滾降

          頻譜衰減是總頻譜能量的特定百分比所在的頻率。

          spectral_rolloff?=?librosa.feature.spectral_rolloff(x+0.01,?sr=sr)[0]
          librosa.display.waveplot(x,?sr=sr,?alpha=0.4)
          plt.plot(t,?normalize(spectral_rolloff),?color='r')
          []

          色度特征:Chroma Feature

          色度向量 (Wikipedia) 是一個典型的 12 元素特征向量,指示每個音高類別{C, C#, D, D#, E, ..., B}的能量是多少存在于信號中。

          chromagram?=?librosa.feature.chroma_stft(x,?sr=sr,?hop_length=512)
          plt.figure(figsize=(15,?5))
          librosa.display.specshow(chromagram,?x_axis='time',?y_axis='chroma',?hop_length=512,?cmap='coolwarm')

          間距和幅度

          音高是聲音的感知屬性,在與頻率相關(guān)的尺度上排序,或者更常見的是,音高是可以判斷聲音在與音樂旋律相關(guān)的意義上“更高”和“更低”的質(zhì)量。

          pitches,?magnitudes?=?librosa.piptrack(y=x,?sr=sr)
          print(pitches)
          [[0. 0. 0. ... 0. 0. 0.]
          [0. 0. 0. ... 0. 0. 0.]
          [0. 0. 0. ... 0. 0. 0.]
          ...
          [0. 0. 0. ... 0. 0. 0.]
          [0. 0. 0. ... 0. 0. 0.]
          [0. 0. 0. ... 0. 0. 0.]]

          參考資料

          • librosa語音信號處理
          • 語音信號處理庫 ——Librosa
          往期精彩回顧




          瀏覽 110
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  玖玖视频这里只有精品 | 日韩中文字幕第一页 | 青青草无码成人天堂免费 | 麻豆av影院日韩影院 | 欧美一区二区三色欲区AA大片 |