Android 实现边录音边转MP3 附Demo下载地址

485 阅读2分钟

使用lame库编译实时转码的MP3库

转载请标明出处:juejin.cn/editor/draf…

LAME是目前最好的MP3编码引擎。LAME编码出来的MP3音色纯厚、空间宽广、低音清晰、细节表现良好,它独创的心理音响模型技术保证了CD音频还原的真实性,配合VBR和ABR参数,音质几乎可以媲美CD音频,但文件体积却非常小。对于一个免费引擎,LAME的优势不言而喻

一、下载lame

下载地址:sourceforge.net/projects/la…

lame官方网站截图

二 创建 android 项目 Koolearn-MP3-Recorde

创建jni目录 并复制 lame-3.100 包下的libmp3lame 目录下的所有 .c和.h文件和 include目录下的lame.h

三, 编辑 lame库中的utils.h,jni和set_get.h 文件

根据我编译过程中遇到的错误提示,我们可以提前把下面文件修改一下 把 extern ieee754_float32_t fast_log2(ieee754_float32_t x); 替换为 extern float fast_log2(float x);还有一些错误都是类似的,可以根据编译的错误提示修改:一般都是把ieee754_float32_t –> float 把set_get.h文件中的#include <lame.h> 引用去掉。

四,编译工具类LameUtil

LameUtil类包含方法

1.init() 初始化lame 2.encode()编码方法 3.flush() 清空编码通道缓存 4.close() 添加MP3文件尾信息,释放转码器

编译LameUtil文件 javah -jni com.koolearn.mp3recorder.util.LameUtil

生成com_koolearn_mp3recorder_util_LameUtil.h文件。 在jni包下根据生成的.h文件创建.c文件 在.c文件中实现.h文件声明的方法(可参考lame文档)

五 在jni目录下创建 Android.mk文件

LOCAL_PATH := (callmydir)include(call my-dir) include (CLEAR_VARS) LAME_LIBMP3_DIR := libmp3lame_3.100 LOCAL_MODULE := koo_mp3lame LOCAL_SRC_FILES := (LAMELIBMP3DIR)/bitstream.c(LAME_LIBMP3_DIR)/bitstream.c (LAME_LIBMP3_DIR)/fft.c (LAMELIBMP3DIR)/id3tag.c(LAME_LIBMP3_DIR)/id3tag.c (LAME_LIBMP3_DIR)/mpglib_interface.c (LAMELIBMP3DIR)/presets.c(LAME_LIBMP3_DIR)/presets.c (LAME_LIBMP3_DIR)/quantize.c (LAMELIBMP3DIR)/reservoir.c(LAME_LIBMP3_DIR)/reservoir.c (LAME_LIBMP3_DIR)/tables.c (LAMELIBMP3DIR)/util.c(LAME_LIBMP3_DIR)/util.c (LAME_LIBMP3_DIR)/VbrTag.c (LAMELIBMP3DIR)/encoder.c(LAME_LIBMP3_DIR)/encoder.c (LAME_LIBMP3_DIR)/gain_analysis.c (LAMELIBMP3DIR)/lame.c(LAME_LIBMP3_DIR)/lame.c (LAME_LIBMP3_DIR)/newmdct.c (LAMELIBMP3DIR)/psymodel.c(LAME_LIBMP3_DIR)/psymodel.c (LAME_LIBMP3_DIR)/quantize_pvt.c (LAMELIBMP3DIR)/setget.c(LAME_LIBMP3_DIR)/set_get.c (LAME_LIBMP3_DIR)/takehiro.c (LAMELIBMP3DIR)/vbrquantize.c(LAME_LIBMP3_DIR)/vbrquantize.c (LAME_LIBMP3_DIR)/version.c lame_util.c include $(BUILD_SHARED_LIBRARY)

其中LOCAL_MODULE为要生成so库的名称 LOCAL_SRC_FILES为要使用的文件(包括刚才创建的.c文件以及.c文件中引用的文件)

六 生成so文件

在控制台(windows打开cmd.exe执行)进入main目录 执行ndk-build 可以生成lib和obj目录,lib目录中就是我们需要的so文件,obj删除

项目地址:github.com/nmyangmo/An…