項目是用C寫的。solution中包含了以下10個project:
1.libspeex
speex動态庫,核心project,使用者使用的就是它,在solution中,接口頭檔案很貼心的放在了一個單獨的檔案夾中,名為Public Header Files。
2.libspeexdsp
靜态庫,從頭檔案名稱可以看出,功能應該是回音抑制、抗抖動等專業算法,本以為它是由libspeex抽離出來的一個下層庫,咱上層使用者跟它是非耦合的。仔細看了看,發現它們并沒有從屬關系。後面看到的project 4依賴于1、2, 7、8、9隻依賴于1,說明2和1是平級的關系,2為1的補充,當需要使用speex的一些進階功能選項時,就需要使用到2了。
3.speexdec
示例exe,功能比較全的speex解碼控制台程式,輸入是格式為raw PCM或者WAVE檔案,輸出是speex編碼檔案,我嘗試了一下,VLC可以播放。搜尋到main函數,可以看到一堆控制台參數提示資訊。
4.speexenc
同上,隻是編碼換成解碼了。
5.testdenoise
測試libspeexdsp中的噪音消除功能。
6.testecho
測試libspeexdsp中的AEC即回音抑制功能。
7.testenc
測試窄帶編碼。
8.testenc_uwb
使用SPEEX_MODEID_UWB初始化編碼。
9.testenc_wb
測試寬帶編碼。
7、8、9的差別
speex三種主要的采樣率8kHz、16kHz、32kHz,它們分别對應 narrowband、wideband、ultra-wideband(即7、9、8)。
那麼7、8、9和4有什麼差別呢?
其實它們都是很小的測試或示例程式,3可以通過控制台參數來控制編碼選項(即上面所說的,使用了project 2)。個人感覺,看看9就可以動手寫自己的代碼了,日後需要用到一些選項時(應該是做優化工作)再去看manual手冊+project 4。
10.testresample
這個工程有點搞,裡面就一個名為testresample.c的檔案,可是竟然不存在!這個工程依賴于libspeexdsp,個人感覺(我又開始猜了)應該是測試resample功能的。
manual手冊關于resamper的說明:
在一些情況下,把音頻從一種抽樣率(sampling rate)轉化成另一種是很有用的。比如說以下場景:混合不同抽樣率的流,有的抽樣率聲霸卡不支援,轉碼等等。是以我們需要resampler。
後記:
speex項目中各工程作用就簡單分析到這了,真要使用speex的話,看manual文檔是必不可少的。日後如果有時間繼續學習speex,我會把筆記分享上來的。