AndroidStudio编译libmp3lame

第一步下载libmp3lame源码。
https://sourceforge.net/projects/lame/files/latest/download
第二步:赋值libmp3lame和include目录下的所有的扩展名为c和h的文件到AndroidStudio中。

在这里插入图片描述

#CMakeLists.txt文件:
# 这里指定了CMake的最低版本为3.4.1
cmake_minimum_required(VERSION 3.4.1)
#该变量为真时会创建完整版本的Makefile
set(CMAKE_VERBOSE_MAKEFILE on)
set(LAME_LIBMP3_DIR ${CMAKE_SOURCE_DIR}/src/main/jni/libmp3lame)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLOGTEST")
include_directories(${CMAKE_SOURCE_DIR}/src/main/jni/libmp3lame)
include_directories(${CMAKE_SOURCE_DIR}/src/main/jni)

# 这里用来添加一个库
add_library(# 这里设置so库的名称为native-lib
            libmp3lame
             # 这里设置该库为共享
             SHARED
             #源码文件
               ${LAME_LIBMP3_DIR}/bitstream.c
               ${LAME_LIBMP3_DIR}/encoder.c
               ${LAME_LIBMP3_DIR}/fft.c
               ${LAME_LIBMP3_DIR}/gain_analysis.c
               ${LAME_LIBMP3_DIR}/id3tag.c
               ${LAME_LIBMP3_DIR}/lame.c
               ${LAME_LIBMP3_DIR}/mpglib_interface.c
               ${LAME_LIBMP3_DIR}/newmdct.c
               ${LAME_LIBMP3_DIR}/presets.c
               ${LAME_LIBMP3_DIR}/psymodel.c
               ${LAME_LIBMP3_DIR}/quantize.c
               ${LAME_LIBMP3_DIR}/quantize_pvt.c
               ${LAME_LIBMP3_DIR}/reservoir.c
               ${LAME_LIBMP3_DIR}/set_get.c
               ${LAME_LIBMP3_DIR}/tables.c
               ${LAME_LIBMP3_DIR}/takehiro.c
               ${LAME_LIBMP3_DIR}/util.c
               ${LAME_LIBMP3_DIR}/vbrquantize.c
               ${LAME_LIBMP3_DIR}/VbrTag.c
               ${LAME_LIBMP3_DIR}/version.c
             )
 #这里用来添加一个库
add_library(# 这里设置so库的名称为native-lib
             eng100
             # 这里设置该库为共享
             SHARED
             src/main/jni/libmp3lame.cpp
             )
# 这里用来查找一个库,并设置到路径变量中去
find_library( # 设置路径变量
              log-lib
           # 你希望CMake编译器加载的NDK函数库
              log )
 # 将一个库关联到目标函数库中
target_link_libraries(# 目标函数库
                        eng100
                        libmp3lame
                       # 想要在目标函数库中使用的函数库,其中${路径变量}
                       ${log-lib} )

#build.gradle文件中添加:
externalNativeBuild {
            cmake {
                cFlags "-DSTDC_HEADERS"
                cppFlags "-std=c++11 -frtti -fexceptions"
                abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
            }
        }
 externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

    sourceSets {
        main {
            jni.srcDirs = ['src/main/jni']
        }
    }

第三步:更改libmp3lame源码文件,不然编译会报错。

 ①删除 fft.c 文件的 47 行的 include“vector/lame_intrin.h”
 ②修改 set_get.h 文件的 24 行的 #include“lame.h”
③将 util.h 文件的 574 行的”extern ieee754_float32_t fast_log2(ieee754_float32_t x);” 替换为 “extern float fast_log2(float x);”

第四步:编译,生成so文件。

#c++代码:
#include <jni.h>
#include "AndroidLog.h"
#include "lame.h"
static lame_global_flags *lame;
extern "C" JNIEXPORT void JNICALL
Java_com_wh_xy_mp3recorder_LameUtils_init(JNIEnv *env, jclass type, jint inSamplerate,
                                          jint inChannel, jint outSamplerate, jint outBitrate,
                                          jint quality) {
    LOGI("%s","Java_com_wh_xy_mp3recorder_LameUtils_init");
    if (lame != NULL) {
        lame_close(lame);
        lame = NULL;
    }
    lame = lame_init();
    lame_set_in_samplerate(lame, inSamplerate);
    lame_set_num_channels(lame, inChannel);//输入流的声道
    lame_set_out_samplerate(lame, outSamplerate);
    lame_set_brate(lame, outBitrate);
    lame_set_quality(lame, quality);
    lame_init_params(lame);
}

#java代码
 static{
        System.loadLibrary("libmp3lame");
    }
    public native static void init(int inSamplerate, int inChannel,
                                   int outSamplerate, int outBitrate, int quality);


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值