音頻特徵提取——pyAudioAnalysis工具包

做者:桂。html

時間:2017-05-04  18:31:09python

連接:http://www.cnblogs.com/xingshansi/p/6806637.html linux


前言git

語音識別等應用離不開音頻特徵的提取,最近在看音頻特徵提取的內容,用到一個python下的工具包——pyAudioAnalysis: An Open-Source Python Library for Audio Signal Analysis,該工具包的說明文檔能夠點擊這裏下載,對應的github連接點擊這裏github

這個工具包原說明文檔支持的是Linux安裝,且不能與python3很好地兼容,注意啦json

1、經常使用工具包簡介ide

目前針對音頻信號,C/C++ 、Python、MATLAB等經常使用的工具包有:工具

2、pyAudioAnalysis工具包簡介測試

pyAudioAnalysis是一個音頻處理工具包,主要功能如圖:ui

其中Feature Extraction包括(順序有前後):

補充說明一下:

  • 1-Zero Crossing Rate:短時平均過零率,即每幀信號內,信號過零點的次數,體現的是頻率特性
  • 2-Energy:短時能量,即每幀信號的平方和,體現的是信號能量的強弱
  • 3-Entropy of Energy:能量熵,跟頻譜的譜熵(Spectral Entropy)有點相似,不過它描述的是信號的時域分佈狀況,體現的是連續性
  • 4-Spectral Centroid:頻譜中心又稱爲頻譜一階距,頻譜中心的值越小,代表越多的頻譜能量集中在低頻範圍內,如:voice與music相比,一般spectral centroid較低
  • 5-Spectral Spread:頻譜延展度,又稱爲頻譜二階中心矩,它描述了信號在頻譜中心周圍的分佈情況
  • 6-Spectral Entropy:譜熵,根據熵的特性能夠知道,分佈越均勻,熵越大,能量熵反應了每一幀信號的均勻程度,如說話人頻譜因爲共振峯存在顯得不均勻,而白噪聲的頻譜就更加均勻,藉此進行VAD即是應用之一
  • 7-Spectral Flux:頻譜通量,描述的是相鄰幀頻譜的變化狀況
    function [vsf] = FeatureSpectralFlux (X, f_s)
    
        % difference spectrum (set first diff to zero)
        afDeltaX    = diff([X(:,1), X],1,2);
        
        % flux
        vsf         = sqrt(sum(afDeltaX.^2))/size(X,1);
    end
  • 8-Spectral Rolloff:頻譜滾降點,給出定義:

  • 9~21-MFCCs:就是大名鼎鼎的梅爾倒譜系數,這個網上資料很是多,也是很是重要的音頻特徵。
  • 22~33-Chroma Vector:這個有12個參數,對應就是12級音階,仍是看原文解釋:A 12-element representation of the spectral energy where the bins represent the 12 equal-tempered pitch classes of western-type music (semitone spacing).
  • 34-Chroma Deviation:這個就是Chroma Vector的標準方差。

這個在音樂聲裏可能用的比較多,目前沒有接觸這類特徵:

什麼是Chroma特徵呢?給出一個示意圖

code示例:

from pyAudioAnalysis import audioBasicIO
from pyAudioAnalysis import audioFeatureExtraction
import matplotlib.pyplot as plt
[Fs, x] = audioBasicIO.readAudioFile("sample.wav");
F = audioFeatureExtraction.stFeatureExtraction(x, Fs, 0.050*Fs, 0.025*Fs);
plt.subplot(2,1,1); plt.plot(F[0,:]); plt.xlabel('Frame no'); plt.ylabel('ZCR'); 
plt.subplot(2,1,2); plt.plot(F[1,:]); plt.xlabel('Frame no'); plt.ylabel('Energy'); plt.show()

  若是但願瞭解更多的音頻特徵,這裏給出一個連接,點擊這裏,包含的特徵有:

對應都有graph、sound能夠點擊,sound是對應的音頻,graph對應的是特徵的效果圖,好比打開zeroCross:

3、pyAudioAnalysis工具包安裝 

pyAudioAnalysis對應連接點擊這裏。安裝這個工具包須要依賴:

  A-hmmlearn安裝

hmmlearn的連接點擊這裏。安裝hmmlearn有幾個前提:

下載以後,我把hmmlearn-master放在python-3.5.2-0\Lib\目錄,cmd窗口下cd進去,輸入:

pip install -U --user hmmlearn

  便可安裝成功:

   B-Simplejson工具包安裝:

Simplejson是Python的JSON編碼和解碼器,它具備簡單、快速、完整、正確和易於擴展的特色,對應的連接點擊這裏。Simplejson工具包直接conda安裝便可:

  C-eyed3安裝:

eyed3:A tool for working with audio files, specifically MP3 files containing ID3 metadata. 它提供了讀寫 ID3 標籤(v1.x 和 v2.3/v2.4)的功能。同時可檢測 MP3 文件的頭信息,包括比特率、採樣頻率和播放時間等。eyed3直接conda install沒有成功,對應的連接點擊這裏。選擇了這個版本:

 

放在了python庫的Lib文件夾下:C:\Users\Nobleding\Anaconda3\pkgs\python-3.5.2-0\Lib,cd到對應目錄下,pip install 文件名.whl,便可完成安裝

  D-pydub安裝:

pydub是音頻處理經常使用的工具包,例如:

打開一個wav格式文件:

from pydub import AudioSegment
song = AudioSegment.from_wav("never_gonna_give_you_up.wav")

  打開一個mp3格式文件:

song = AudioSegment.from_mp3("never_gonna_give_you_up.mp3")

  或者其餘音頻、視頻格式:

ogg_version = AudioSegment.from_ogg("never_gonna_give_you_up.ogg")
flv_version = AudioSegment.from_flv("never_gonna_give_you_up.flv")

mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")
wma_version = AudioSegment.from_file("never_gonna_give_you_up.wma", "wma")
aac_version = AudioSegment.from_file("never_gonna_give_you_up.aiff", "aac")

  更多細節信息能夠訪問其主頁。我在github上下載對應的工具包,裏邊有對應的安裝說明。

若是處理wav文件,沒有其餘要求,若是音頻是其餘格式它要求電腦安裝 ffmpeg orlibav.若是沒有安裝,運行會有提示:

ffmpeg下載,選擇版本 

解壓並添加環境變量,並利用ffplay測試一下打開一個mp4文件:

ffmpeg安裝成功。這個時候import pydub,再也不有warning信息

  E-pyAudioAnalysis安裝

Github給出的是linux下的安裝思路,這裏下載以後將pyAudioAnalysis放在了\Anaconda3\Lib\site-packages文件夾下,輸入指令:

成功調用,原數據是支持Python2的,不少細節要修改,給出一個簡單讀取wav的測試:

from pyAudioAnalysis import audioBasicIO
import numpy as np
import matplotlib.pyplot as plt
[Fs, x] = audioBasicIO.readAudioFile("count2.wav");
time = np.arange(0,len(x))*1.0/Fs
plt.plot(time,x)

  效果圖:

相關文章
相關標籤/搜索