LAME是目前最好的MP3編碼引擎。LAME編碼出來的MP3音色純厚、空間寬廣、低音清晰、細節表現良好,它獨創的心理音響模型技術保證了CD音頻還原的真實性,配合VBR和ABR參數,音質幾乎可以媲美CD音頻,但文件體
積卻非常小。
使用的前提:
1.先去官網中先下載源碼:https://sourceforge.net/projects/lame/(當前最新版本是3.100)
2.新建Android項目,並在創建時勾選Include C++ support,創建項目後,可以發現在app/src/main目錄下有cpp和java兩個目錄。
3.將源碼中lame-3.100/libmp3lame目錄複製到app/src/main/cpp目錄中,僅保留.h和.c文件,另外還需複製lame-3.100/includes/lame.h文件到項目cpp目錄下。
4.修改部分文件
- 刪除fft.c文件的vector引用include “vector/lame_intrin.h”
- 將set_get.h中的 #include <lame.h> 修改爲 #include “lame.h”
- 將util.h文件的570行的extern ieee754_float32_t fast_log2(ieee754_float32_t x); 替換爲 extern float fast_log2(float x);
後續的編譯步驟:
1.在Android studio中修改app/src/main/cpp目錄下的CMakeList.txt,由於lame源碼需要編譯的文件較多,可以使用以下方式編譯整個文件夾
aux_source_directory(libmp3lame LAME_SRC_DIR)
add_library(native-lib SHARED native-lib.cpp ${LAME_SRC_DIR})
2.在app/build.gradle中配置cmake參數
externalNativeBuild {
cmake {
cFlags "-DSTDC_HEADERS" // 必須,給編譯器加上STDC頭文件的宏定義
abiFilters "armeabi-v7a" // 可選,指定生成so的兼容的架構
}
}
3.編輯native-lib.cpp文件,調用lame方法
extern "C" {
// 因爲是用的是交叉編譯的,所以需要在 extern "C" 下
#include "libmp3lame/lame.h"
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_ajun_lamejun_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "lame version is ";
hello += get_lame_version();
return env->NewStringUTF(hello.c_str());
}
4.編譯後結果:
最後附上一個示例代碼:https://download.csdn.net/download/qq_34829270/11862926