人工智慧下的音訊還能這樣玩!!!!

Python研究者發表於2021-08-21

人工智慧音訊處理庫—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

正文結束!!!

相關文章