【python】Windows中編譯安裝libsamplerate和scikits.samplerate

來源:互聯網
上載者:User

標籤:python   librosa   samplerate   

librosa緣由

librosa是一個音頻和音樂處理的Python包,我用它來做音訊特徵提取。但是在使用時,發現librosa.load將音樂檔案轉化為時間序列的過程中,速度實在難以忍受,cpu跑的非常高,程式好像假死的狀態。
查閱官方文檔發現,預設情況下,librosa會使用scipy.signal進行音頻訊號的重採樣,這在實際使用時是很慢的。如果要獲得很高的效能,官方建議安裝libsamplerate和其相應的python模組scikits.samplerate
這就是說,在Windows下進行安裝的話,要先編譯libsamplerate得到相應的lib和dll檔案,再安裝python的介面模組。
我試著在linux下進行安裝,過程是很流暢的,因為使用apt-get可以方面安裝libsamplerate,pip進行scikits.samplerate安裝的時候,系統可以直接找到libsamplerate編譯好的lib檔案。

雖然這個軟體比較小眾,但如果有讀者遇到相同的問題,希望能對你有所協助。

Windows下編譯libsamplerate

libsamplerate官方說明
編譯步驟:

  1. 解壓libsamplerate壓縮包到C:\libsamplerate-0.1.8目錄
  2. 下載libsndfile的二進位安裝包進行安裝
  3. 複製libsndfile中的libsndfile-1.dll, libsndfile-1.lib 和 libsndfile-1.def檔案到C:\libsamplerate-0.1.8目錄中
  4. 複製libsndfile中的include/sndfile.h到C:\libsamplerate-0.1.8目錄中
  5. 確保將vc編譯器的bin目錄加入到系統內容變數中
  6. 開啟Win32\Makefile.msvc檔案,修改
    • MSVCDir=(你的安裝目錄)\Microsoft Visual Studio 11.0\VC
    • CFLAGS變數加入Microsoft SDKs的Include檔案夾,比如我的是CFLAGS=/nologo /MD /W1 /GX /O2 /Zm200 /I “$(MSVCDir)\Include” /I “C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include” /I . /I “Win32” /I “src” /D “WIN32” /D “_USRDLL” /YX /FD /Zm1000
    • PROG_LINK_FLAGS變數加入Microsoft SDKs的Lib檔案夾,我的是PROG_LINK_FLAGS=/nologo /incremental:no /libpath:”$(MSVCDir)\Lib” /libpath:”C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib” /pdb:”libsamplerate-0.pdb” /machine:I386 /exetype:dynamic
    • DLL_LINK_FLAGS變數加入Microsoft SDKs的Lib檔案夾,我的是DLL_LINK_FLAGS=/nologo /dll /incremental:no /libpath:”$(MSVCDir)\Lib” /libpath:”C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib” /pdb:”libsamplerate-0.pdb” /implib:”.\libsamplerate-0.lib” /machine:I386 /out:”libsamplerate-0.dll”
  7. 命令列模式下進入C:\libsamplerate-0.1.8目錄,輸入Make.bat進行編譯,使用make check進行程式測試
  8. 最終得到了libsamplerate-0.dll,libsamplerate-0.lib,結合src目錄下面的samplerate.h
源碼安裝scikits.samplerate

如果要使用pip進行安裝的話,系統可能找不到libsamplerate的lib檔案,導致安裝失敗。
下載了scikits.samplerate的源碼包之後,需要對site.cfg檔案進行配置,制定samplerate庫的lib檔案名稱和所在目錄才可以正常的安裝,不然也會導致失敗。

在scikits.samplerate目錄下,開啟site.cfg檔案,修改內容為:

[samplerate]library_dirs = c:\libsamplerate-0.1.8libraries = libsamplerate-0

這樣就可以進行python setup.py install安裝了。

這裡還要注意,安裝成功之後,在python的第三方庫檔案夾中找到scikits.samplerate,在scikits\samplerate檔案夾中將libsamplerate編譯好的dll檔案放進去,這樣就可以使用了。

補充:音頻重採樣

頻率對應於時間軸線,振幅對應於電平軸線。波是無限光滑的,弦線可以看成由無數點組成,由於儲存空間是相對有限的,數字編碼過程中,必須對弦線的點進行採樣。採樣的過程就是抽取某點的頻率值,很顯然,在一秒中內抽取的點越多,擷取得頻率資訊更豐富,為了複原波形,一次震動中,必須有2個點的採樣,人耳能夠感覺到的最高頻率為20kHz,因此要滿足人耳的聽覺要求,則需要至少每秒進行40k次採樣,用40kHz表達,這個40kHz就是採樣率。

為了減少計算複雜度和儲存複雜度,採樣速率轉換技術是十分必要的,音頻重採樣演算法可以用來實現音頻訊號任意採樣速率之間的轉換。

對於採樣率為Fs,長度為M個採樣點的音頻訊號x[n],,通過採樣因子P/Q進行重採樣後,這個訊號的樣本數可以增大或者減小。該過程可以分為如下三個步驟[17]:
(1)上採樣:在原訊號相鄰兩點插入入P-1個零點,即建立一個有P (M-1)+1個採樣點的訊號xu[n],當n=1,2,…,M時,xu[P(n-1)+1] = x[n];否則,xu[n]=0。
(2)插值:xu[n]和一個低通插值濾波器h[n]作卷積:xi[n]= xu[n]h[n]。
(3)下採樣:每隔Q-1個點抽取一個點,即建立有Q個點的訊號xd[n],當n=1,2,…,+1時,xd[n]=xi[1+Q (n-1)],則重採樣訊號y[n]=xd[n]。(符號表示向下取整數)
不同類型的重採樣演算法都可以分為上述三個過程,它們的唯一的區別就在於步驟2中所採用的插值濾波器的不同。

注意事項:
1.上採樣時,會造成鏡像資訊,因此需要使用低通濾波器濾除(線性插值本身就是低通濾波器,因此不需要額外處理)。
2.下採樣時,可能會造成頻譜混淆,因此在下採樣之前用低通去混淆濾波器濾除。
3.重採樣演算法非常消耗時間,使用多相濾波器與一些條件限制,可以大大提高運算速度。

轉載請註明作者Jason Ding及其出處
GitCafe部落客頁(http://jasonding1354.gitcafe.io/)
Github部落客頁(http://jasonding1354.github.io/)
CSDN部落格(http://blog.csdn.net/jasonding1354)
簡書首頁(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
百度搜尋jasonding1354進入我的部落客頁

【python】Windows中編譯安裝libsamplerate和scikits.samplerate

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.