准備工作
首先需要在pycharm中安裝好python_speech_features和librosa兩個包。
建議先安裝anaconda,然后在anaconda中創建一個虛擬環境,用於安裝Pycharm的所有需要的包,然后再在pycharm中導入在anaconda中創建的虛擬環境即可。(同時使用conda命令安裝pycharm包比使用pip命令安裝成功率更高)。這樣可以在任意一台電腦上在pycharm中導入這個虛擬環境都可以隨時調用之前安裝的包,而不用再去安裝pycharm中繁瑣的包了。
1 使用python_speech_features進行mfcc
有兩種調用方式:
1 在導入包的時候直接將mfcc,logfbank(dct之前的參數),delta(差分)導入
from python_speech_features import mfcc
接着調用:
mfcc_feature = mfcc(wavedata, framerate, winlen=0.064, winstep=0.032, nfilt=13, nfft=1024) # mfcc系數 #其中wavedata為語音數據 #framerate為采樣率 #winlen為幀長,單位為秒 #winstep為幀移,單位為秒 #nfilt為返回的mfcc數據維數,默認為13維(但經過我的實驗,nfilt最多也只能返回13維的mfcc參數) #nfft為fft點數,一般要和幀長對應的采樣點數要一樣
2 在導入包的時候只導入包,不導入具體函數
import python_speech_features
接着在使用該包時需要導入包和具體函數,使用方法如下:
fbank參數(未進行dct和未取對數之前的參數):
fbank_features=python_speech_features.base.fbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function >) #fbank參數為未進行dct和取對數之前的mfcc #signal - 需要用來計算特征的音頻信號,應該是一個N*1的數組 #samplerate - 我們用來工作的信號的采樣率 #winlen - 分析窗口的長度,按秒計,默認0.025s(25ms) #winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms) #numcep - 倒頻譜返回的數量,默認13 #nfilt - 濾波器組的濾波器數量,默認26 #nfft - FFT的大小,默認512 #lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認為0 #highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認為采樣率/2 #preemph - 應用預加重過濾器和預加重過濾器的系數,0表示沒有過濾器,默認0.97 #ceplifter - 將升降器應用於最終的倒譜系數。 0沒有升降機。默認值為22。 #appendEnergy - 如果是true,則將第0個倒譜系數替換為總幀能量的對數。 #winfunc - 分析窗口應用於每個框架。 默認情況下不應用任何窗口。 你可以在這里使用numpy窗口函數 例如:winfunc=numpy.hamming #返回: 一個大小為numcep的numpy數組,包含着特征,每一行都包含一個特征向量。
delta(差分):
python_speech_features.base.delta(feat, N) #feat 為mfcc數據或fbank數據 #N - N為1代表一階差分,N為2代表二階差分 #返回:一個大小為特征數量的numpy數組,包含有delta特征,每一行都有一個delta向量
logfbank參數(mfcc進行dct之前的參數):
logfbank_features=python_speech_features.base.logfbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97) #signal - 需要用來計算特征的音頻信號,應該是一個N*1的數組 #samplerate - 我們用來工作的信號的采樣率 #winlen - 分析窗口的長度,按秒計,默認0.025s(25ms) #winstep - 連續窗口之間的步長,按秒計,默認0.01s(10ms) #nfilt - 濾波器組的濾波器數量,默認26 #nfft - FFT的大小,默認512 #lowfreq - 梅爾濾波器的最低邊緣,單位赫茲,默認為0 #highfreq - 梅爾濾波器的最高邊緣,單位赫茲,默認為采樣率/2 #preemph - 應用預加重過濾器和預加重過濾器的系數,0表示沒有過濾器,默認0.97 #返回: 一個包含特征的大小為nfilt的numpy數組,每一行都有一個特征向量
參考:
使用python_speech_features提取音頻文件特征
2 使用librosa包進行mfcc
librosa使用方法:
import librosa y, sr = librosa.load('i1.wav',sr=None) mfccs = librosa.feature.mfcc(y=y, sr=sr,n_mfcc=24) #n_mfcc為返回的mfcc數據維度
其中
librosa.feature.mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs) 參數: #y:np.ndarray [shape=(n,)] 或 None #音頻時間序列 #sr:number > 0 [scalar] #y的采樣率 #S:np.ndarray [shape=(d, t)] or None #對數功能梅爾譜圖 #n_mfcc: int > 0 [scalar] #要返回的MFCC數量 #dct_type:None, or {1, 2, 3} #離散余弦變換(DCT)類型。默認情況下,使用DCT類型2。 #norm:None or ‘ortho’ #規范。如果dct_type為2或3,則設置norm =’ortho’使用正交DCT基礎。 #標准化不支持dct_type = 1。 #kwargs:額外的關鍵參數 #參數melspectrogram,如果按時間序列輸入操作 #返回: M:np.ndarray [shape=(n_mfcc, t)] #MFCC序列
常用參數,調用方法
mfcc_features = librosa.feature.mfcc(wavedata, sr=framerate, n_fft=1024, hop_length=512, n_mfcc=13) #其中wavedata為語音數據 #framerate為采樣率 #hop_length為幀移 #n_mfcc為返回的mfcc數據維數,默認為20維