speex從1.2版本開始支援靜音檢測vad(還有降噪、回聲消除、自動增益控制agc、抖動buffer、重取樣等一堆功能)等針對語音的預處理功能,實現在libspeexdsp庫中。
真正用起來後,發現各種坑!
因為speex初始化時frame size填的20ms幀長,所以各位從上圖可以看到,每隔20ms,波形會出現乙個突變,突變從20ms對齊處開始,持續1.5ms左右
將降噪和agc關閉後,現象不變,還跟上圖一樣
察看speexdsp原始碼中的preprocess.c檔案,發現speex_preprocess_state_init函式預設開啟降噪,不過我用speex_preprocess_ctl函式顯式關閉後,結果還是如上圖。而speex_preprocess_run函式裡面有段注釋嚇到我了
speexdsp的降噪也是擺設,開啟降噪功能後,背景雜訊根本沒有任何減少(還增加了它自己引入的電流突突聲)
speexdsp還有個問題:即使是單純的背景雜訊,它也可能將其檢測為語音,感覺它是單純基於頻域,即只要屬於高頻成分,一律認為是人聲
以上兩點導致vad功能完全不可用
最後附上**,好奇的同學可以自行嘗試
#include #include #include #include #include #include #define sample_rate (16000)
#define frame_size (20) //ms
#define samples_per_frame (sample_rate/1000 * frame_size)//每毫秒16個樣點
#define frame_bytes (samples_per_frame * 2)//每個樣點2位元組(單通道)
int main()
free(buf);
fclose(infile);
fclose(outfile);
speex_preprocess_state_destroy(state);
return 0;
}
編譯執行:
gcc squelch.c -lspeexdsp
./a.out
還好我最終用自己想出來的方法實現了靜音檢測,雖然應用範圍較窄,但符合我們的使用場景 千萬不要用這些工具
本文與12.26 12.27日有更新,主要是把maxthon換成了firefox。因為現在,我實在太喜歡firefox了,由此而導致的 maxthon 被拋棄的事,本人概不負責。1.blog 網路日誌 web 2.0 時代的代表產品,也是網際網路從以資料中心轉向以人為中心的最顯著標誌。你可以沒有個人...
為什麼不要用 StringBuffer
很多人在回答新手提問的時候會說,stringbuilder 是非同步的,所以快一些,stringbuffer是同步 執行緒an全 的,所以慢一些。從技術上說這句話是沒有錯的,但是為什麼又不要用 stringbuffer 呢?這就是為什麼 stringbuffer 這個類天生缺陷。在api設計中有一條...
不要用手機挖礦
成功的挖礦協議不會使用日常生活進行時的裝置挖礦。挖礦的意義 挖礦的意義是縮短將願意努力創新努力追求更高 更快 更強的人的努力轉化為回報的週期。挖礦是人類文明由0.7踏過1.0的必經之路。挖礦去掉中間環節,直接將造幣權賦予努力行動的人。協議保證造幣生產力不脫離人類活動空間,且保證有利可圖的造幣活動空間...