一、概述
Lame是目前最好的mp3編解碼工具。
特點:音質好,壓縮比比較高,被大量軟件和硬件支持,應用廣泛。
所以儲備一下mp3的編解碼知識還是很有必要的
二、編譯示例
繼上一節中新建的demo開始講解:
1.下載lame源代碼:下載
2.解壓代碼並把lame-3.99.5文件下,libmp3lame和include文件夾下的.c和.h文件都copy到cpp/lame文件夾下。
3.對源碼進行修改
a.刪除 fft.c 文件的 47 行的 include“vector/lame_intrin.h”
b.修改 set_get.h 文件的 24 行的 #include“lame.h”
c.將 util.h 文件的 574 行的”extern ieee754_float32_t fast_log2(ieee754_float32_t x);” 替換為 “extern float fast_log2(float x);”
3.修改CMakeLists.txt文件
#生成動態共享庫 add_library( # 設置編譯成so庫的名稱 native-lib # 生成動態庫或共享庫,此處如果SHARED改為STATIC,其含義是生成靜態庫 SHARED # 提供一個需要編譯的源文件的相對路徑(),native-lib.cpp就是需要編譯的源文件 native-lib.cpp lame/bitstream.c lame/encoder.c lame/fft.c lame/gain_analysis.c lame/id3tag.c lame/lame.c lame/mpglib_interface.c lame/newmdct.c lame/presets.c lame/psymodel.c lame/quantize.c lame/quantize_pvt.c lame/reservoir.c lame/set_get.c lame/tables.c lame/takehiro.c lame/util.c lame/vbrquantize.c lame/VbrTag.c lame/version.c )
4.修改app文件夾下的build.gradle文件
5.修改native-lib.cpp文件打印lame的版本號
extern "C" jstring Java_com_yw_lamedemo_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; //此處輸出lame的版本號 return env->NewStringUTF(get_lame_version()); } //此處僅僅是輸出了lame的版本號,如果需要其他的新加的功能可以自己添加對應的功能
6.執行make project 編譯后的so庫會放到cpp/libs文件夾下
7.到此編譯lame就算是結束了。GitHub