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


作者:桂。

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

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


前言

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

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

一、常用工具包簡介

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

二、pyAudioAnalysis工具包簡介

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

其中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:

三、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)

  效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM