天天看點

speex-1.2beta2開源音頻編碼器win32下編譯的一點心得

speex是一個開源的基于CELP算法的音頻編解碼器。這個算法早在1985年就已經公開了,應該不會遇到什麼licence的問題了。相信做音頻和voip的朋友對它一定都非常熟悉。 speex的主要特點如下:

(1)開源的軟體,而且完全免費———如果你願意贊助的話,可以通過 www.speex.org與他們取得聯系

(2)使用嵌入式比特流,使編解碼器可以适應高帶寬和低帶寬的不用應用場合

(3)支援各種不同的比特率情況下的編解碼(從2.15kbps到44kbps)

(4)支援動态比特率切換(AMR)和變比特率操作(VBR)

(5)在VBR中內建了語音活躍檢測(VAD),支援不連續傳輸(DTX)

(6)支援混音(Variable complexity)

(7)嵌入寬帶結構(支援可縮放的采樣率)

(8)支援32KHz極端的寬頻模式(Utra-wideband mode)

(9)支援增強雙聲道編碼

(10)采用Fix-point實作方式,加快運作速度

不光如此,它還可以支援AEC,基于聲學的回音消除功能。

那麼這個東西如何在win32環境下面編譯呢?我以我能拿到的最新版本speex-1.2beta2在vs2003環境下面的編譯為例來說明一下:

(1)首先編譯libspeex

這個庫分為靜态(lib)和動态(dll)兩個版本,可以依照需要分别編譯使用。

從他們的maillist可以看出,他們對于linux環境下面的speex還是比較放心的,但是沒有更新win32下面的這些工程檔案。這樣勢必導緻我們編譯的時候會遇到一些問題。   首先的問題就是#include <ogg/ogg.h>這個檔案打不開,可以到 http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz這裡下載下傳libogg,解壓然後編譯它的win32版本,這個還是沒問題的。編譯完畢後,會生成一個libogg_static_d.lib,我們把libogg的include路徑和lib路徑以及連結中需要添加的lib加到目前的libspeex工程中,這樣第一步就差不多了。   編譯還會提示沒有找到medfilter.c這個檔案,通過檢視它的changelog就知道已經沒用了,是以直接從解決方案管理器裡面删除掉這個.c檔案即可。   然後可以順利編譯了,但是要注意這些還沒完根據change log,我們可以看到它還少了一個window.c這個檔案,你可以從libspeex目錄中找到,把它加入到目前的項目中即可(這個問題讓我都要瘋狂了,明明編譯出來了lib但是在程式中總是提示什麼unsolved external _lpc_window之類的雲雲)。原來問題在這裡。

(2)然後編譯幾個自帶的enc和dec程式

這裡需要說明的是,在enc和dec工程中需要添加libogg_static_d.lib,libspeex.lib以及各自的include和lib的路徑。然後,需要把src目錄下面的skeleton.c和skeleton.h都添加到目前的enc或者dec項目中才有可能真正生成可以使用的exe程式。

繼續閱讀