如何在Android中使用lame庫

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.修改部分文件

  1. 刪除fft.c文件的vector引用include “vector/lame_intrin.h”
  2. 將set_get.h中的 #include <lame.h> 修改爲 #include “lame.h”
  3. 將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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章