做者:桂。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包括(順序有前後):
補充說明一下:
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
這個在音樂聲裏可能用的比較多,目前沒有接觸這類特徵:
什麼是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)
效果圖: