使用lame庫編譯實時轉碼的MP3庫
LAME是目前最好的MP3編碼引擎。LAME編碼出來的MP3音色純厚、空間寬廣、低音清晰、細節表現良好,它獨創的心理音響模型技術保證了CD音頻還原的真實性,配合VBR和ABR參數,音質幾乎可以媲美CD音頻,但文件體積卻非常小。對於一個免費引擎,LAME的優勢不言而喻
一、下載lame
下載地址:https://sourceforge.net/projects/lame/files/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 := $(call my-dir)
include $(CLEAR_VARS)
LAME_LIBMP3_DIR := libmp3lame_3.100
LOCAL_MODULE := koo_mp3lame
LOCAL_SRC_FILES := $(LAME_LIBMP3_DIR)/bitstream.c $(LAME_LIBMP3_DIR)/fft.c $(LAME_LIBMP3_DIR)/id3tag.c $(LAME_LIBMP3_DIR)/mpglib_interface.c $(LAME_LIBMP3_DIR)/presets.c $(LAME_LIBMP3_DIR)/quantize.c $(LAME_LIBMP3_DIR)/reservoir.c $(LAME_LIBMP3_DIR)/tables.c $(LAME_LIBMP3_DIR)/util.c $(LAME_LIBMP3_DIR)/VbrTag.c $(LAME_LIBMP3_DIR)/encoder.c $(LAME_LIBMP3_DIR)/gain_analysis.c $(LAME_LIBMP3_DIR)/lame.c $(LAME_LIBMP3_DIR)/newmdct.c $(LAME_LIBMP3_DIR)/psymodel.c $(LAME_LIBMP3_DIR)/quantize_pvt.c $(LAME_LIBMP3_DIR)/set_get.c $(LAME_LIBMP3_DIR)/takehiro.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刪除
項目地址:https://github.com/nmyangmo/Android-Mp3-Record