在專案中使用speex對實時採集到的音訊流進行去噪,發現執行一段時間後程式就會崩潰。
然後再讓程式跑起來等著,出錯後得到如下資訊:
#0 0xb6e46390 in raise () from /lib/libpthread.so.0
#1 0xb6259ee4 in __aeabi_ldiv0 () at ../../../../gcc~linaro-4.8-2013.12/libgcc/config/arm/lib1funcs.s:1331
據此檢視原始碼後確定是div32_16_q15呼叫的div32_16引起的,故修改fixed_generic.h的最後幾行:
200 #if 0201 #define div32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
202 #define pdiv32_16(a,b) (((spx_word32_t)(a))/(spx_word16_t)(b))
203 #define div32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
204 #define pdiv32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b))
205 #else
206 //modify by sunxiaopeng
207 #define div32_16(a,b) (0==(b)?0:(((spx_word32_t)(a))/(spx_word16_t)(b)))
208 #define pdiv32_16(a,b) (0==(b)?0:(((spx_word32_t)(a))/(spx_word16_t)(b)))
209 #define div32(a,b) (0==(b)?0:(((spx_word32_t)(a))/(spx_word32_t)(b)))
210 #define pdiv32(a,b) (0==(b)?0:(((spx_word32_t)(a))/(spx_word32_t)(b)))
211 #endif
搞定收工!
注: 這裡我用的編譯選項是fixed_point,因為如果用floating_point很多android手機跑不動。
另外還有個編譯選項是fixed_point_debug,開啟後也可以避免除0錯誤,但是它內部的判斷較多,估計會慢一些。
speex編譯靜態庫for iOS
make install 在make install執行完成後,在 users share02 desktop libogg 這個路徑下面會生成i386的資料夾,在i386下面生成了libogg.a這個檔案,這就是i386環境用的ogg靜態庫 如果這個時候你的環境被你打亂,沒有按照順序成功執行,你可...
C語言中的除0操作
int fenzi 10 int fenm 0 int jieguo 0 jieguo fenzi fenm printf jieguo d jieguo 結果就是程式在編譯時直接報錯,說發生了整型數除0操作 結果就是程式可能正常編譯但是執行結果是 這裡的1.inf00是乙個特殊的符號吧 1.inf...
C C 中關於除 0 的處理
演算法競賽入門經典p14 code block測試 a4 表示式1.0 0.0 0.0 0.0的值是多少?include include using namespace std int main 輸出 inf nan 1.inf00 1.ind00a5 表示式1 0的值是多少?include inc...