使用lame庫編譯實時轉碼的MP3庫

LAME是目前最好的MP3編碼引擎。LAME編碼出來的MP3音色純厚、空間寬廣、低音清晰、細節表現良好,它獨創的心理音響模型技術保證了CD音頻還原的真實性,配合VBR和ABR參數,音質幾乎可以媲美CD音頻,但文件體積卻非常小。對於一個免費引擎,LAME的優勢不言而喻

一、下載lame

下載地址:https://sourceforge.net/projects/lame/files/lame/:

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

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