一、LAME简介
LAME是目前非常优秀的一种MP3编码引擎,在业界,转码成Mp3格式的音频文件时,最常用的就是LAME库。当达到320Kbit/s时,LAME编码出来的音频质量几乎可以和CD的音质相媲美,并且还能保证整个音频文件的体积非常小,因此若要在移动端平台上编码MP3文件,使用LAME便成为唯一的选择。
二、使用场景
操作系统:Android。
场景:
1.录音时保存Mp3格式的文件
2. 将wav无损音频文件转码成mp3这种体积相对较小的音频文件。
3.可以将获取到的音频流进行录制保存为mp3格式。
三、开发准备
LAME的源码是托管到sourceforge.net上的,我们开发一个基于LAME的项目,就不得不下载其源码用于编译。
如果需要集成到Android系统上,就需要开发者具备一些NDK开发的能力。
四、开发过程
下面针对Android使用Lame做了基本的封装,供实际开发过程中进行参考:
首先,在java类中定义native方法。
private static native long nInit(int inSampleRate, int inChannels, int outSampleRate, int outBitrate, int model, intquality);private static native int nGetVersion(longlamePtr);private static native int mGetMp3bufferSize(longlamePtr);private static native int mGetMp3bufferSizeWithSamples(long lamePtr, intsamples);private static native int nEncodeShortInterleaved(long lamePtr, short[] bufLR, int samples, byte[] outMp3buf);private static native int nEncodeShort(long lamePtr, short[] bufL, short[] bufR, int samples, byte[] outMp3buf);private static native int nFlush(long lamePtr, byte[] outBuf);private static native void nClose(long lamePtr);
生成相应的.h的头文件,并实现该头文件,完成整体逻辑的编写。
#include #include#include#include"com_renhui_lame_Lame.h"#include"libmp3lame/lame.h"
extern "C"JNIEXPORT jlong JNICALL Java_com_renhui_lame_Lame_nInit(JNIEnv*env, jclass type, jint inSampleRate, jint inChannels,
jint outSampleRate, jint outBitrate, jint model, jint quality) {
lame_global_flags*lameFlags;
l