1. 程式人生 > >編譯speex / speexdsp for iOS audiounit邊錄邊播,audioqueue邊錄邊播

編譯speex / speexdsp for iOS audiounit邊錄邊播,audioqueue邊錄邊播

參考文章: speex編譯靜態庫for iOS

speex部分:

一:官網下載最新的穩定版speex (目前是1.2.0)

二:配置configure檔案

檢視幫助
$ ./configure --help
裡面會介紹相應引數的作用 在命令列輸入 arm64
$ ./configure -prefix=/Users/lj/Desktop/speex-1.2.0/speexlib -host=armv64-apple-darwin --disable-shared --enable-static --disable-float-api --disable-binaries CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch arm64"
armv7s
$ ./configure -prefix=/Users/lj/Desktop/speex-1.2.0/armv7s -host=armv7s-apple-darwin --disable-shared --enable-static --disable-float-api --disable-binaries CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch armv7s"

armv7 引數: -prefix:編譯後內容存放地 -build:在什麼宿主機上面編譯(系統會自動識別,可以省略) -host:交叉編譯產生的專案要放在什麼系統上執行(必填) --enable-static:生成靜態庫 CC="xcrun -sdk iphoneos clang -mios-version-min=8.0 -fembed-bitcode -arch arm64"    使用xcode指定的編譯器,最低版本是8,處理器架構為arm64

三:編譯

$ make && make install

四:遇到的問題

1.在make命令是很多下面的報錯 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: .libs/libspeex.a(exc_10_32_table.o) cputype (16777223) does not match previous archive members cputype (16777228) (all members must match) 配置檔案時加上: --disable-debug--disable-asm-optimizations
 --enable-sse
2.也是在make時報錯
clang: warning: argument unused during compilation: '-msse' [-Wunused-command-line-argument]
In file included from cb_search.c:39:
In file included from ./vq.h:44:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/xmmintrin.h:27:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include/mmintrin.h:64:12: error: invalid conversion between vector type '__m64'
      (vector of 1 'long long' value) and integer type 'int' of different size
    return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
解決辦法:刪除配置選項--disable-asm-optimizations就好了,我也不明白為什麼

SpeexDSP部分:

一:前序

從1.2rc2版本中,speex就將非壓縮和解壓縮部分放在了SpeexDSP中,從speexz中分離出來了, 打算編譯,結果armv7,armv7s都編譯好了,唯獨arm64編譯不過,因為什麼arm架構處理器擴充套件結構(NEON)的問題一直編譯不過,沒法, 打算擼原始碼了

二:準備工作

1.下載SpeexDSP 版本1.2rc3 下載地址:https://www.speex.org/downloads/ 2.從下載包裡面去掉原始碼之外的東西,這個版本下,我就只留下了include和libspeesdsp兩個資料夾

三:開擼

1.將檔案拖進工程,編譯報錯:如下之類的地方報錯
#ifndef FLOATING_POINT
#error You now need to define either FIXED_POINT or FLOATING_POINT
#endif
#if defined (ARM4_ASM) || defined(ARM5E_ASM) || defined(BFIN_ASM)
#error I suppose you can have a [ARM4/ARM5E/Blackfin] that has float instructions?
#endif
#ifdef FIXED_POINT_DEBUG
#error "Don't you think enabling fixed-point is a good thing to do if you want to debug that?"
#endif
找了好久都沒找到,最後看到一篇相似的文章, 在工程中build-setting->preprocessor macros下修改如下,便能修復這個問題


2.執行,報錯#include "speex/speex_preprocessor.h" file not found 刪除speex/就可以了,這個錯有很多,耐心改, 3.執行,還報錯,提示有好多的main.o 去libspeexdsp資料夾下面刪除四個測試檔案 4.這下好了,成功執行;

下面部分是自己的測試程式碼,有點兒亂,但是可以看更新日誌中的過程

https://github.com/liu5656/SpeexDemo

看我這麼辛苦,給個start唄