编码mp3的方法及编码mp3的设备的制造方法

文档序号:10552740阅读:294来源:国知局
编码mp3的方法及编码mp3的设备的制造方法
【专利摘要】本发明实施例提供一种编码mp3的方法及编码mp3的设备。所述方法包括移植Lame到Android平台;编译所述移植后的Lame,建立编码mp3的JNI接口函数;使用所述JNI接口函数编码mp3文件。本发明实施例所提供的Android平台编码mp3的方法及在Android平台编码mp3的设备,通过将Lame移植到Android平台,并编译所述移植后的Lame,建立编码mp3的JNI接口函数,使用所述JNI接口函数来编码mp3文件。从而可以实现在Android平台编码mp3的功能,进一步满足用户的在Android平台编码mp3的个性化需求。
【专利说明】
编码mp3的方法及编码mp3的设备
技术领域
[0001 ]本发明实施例涉及Android平台技术领域,尤其涉及一种编码mp3的方法及编码 mp3的设备。
【背景技术】
[0002] Mp3是一种压缩的音频格式。MP3的全称是Moving Picture Experts Group,Audio Layer III(移动图像专家组音频第三层),它所使用的技术是在V⑶(MPEG-1)的音频压缩技 术上发展出的第三代。MP3是开始于1980年代中期(1987)的一种音频压缩的国际技术标准, 致力于高质量、低数据率的声音编码。MP3的突出优点是:压缩比高、音质较好、制作简单及 交流方便。音质是人们关心的一个焦点。但最吸引人的还是MP3制作和交流上的方便。只要 有一台电脑,就可将⑶节目录入电脑硬盘,然后压制成MP3格式。也可直接从Internet网上 下载MP3音乐,网上有取之不尽用之不竭的MP3音乐。用户还可以把自己制作的MP3音乐上网 交流。总之,良好的音质和丰富的节目源将使MP3成为最佳的大众音乐媒体。
[0003] Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设 备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名 称,中国大陆地区较多人使用"安卓"或"安致"。Android操作系统最初由Andy Rubin开发, 主要支持手机。之后Google收购注资,并且与84家硬件制造商、软件开发商及电信运营商组 建开放手机联盟共同研发改良的Android系统。Android逐渐从智能手机扩展到平板电脑及 其他领域上,如电视、数码相机、游戏机等。
[0004] Android平台是现在非常流行的一种移动平台,而其上丰富的多媒体模块是其优 势之一。且Android平台的多媒体模块可以解码多种音视频格式。在编码(即录制)音频方 面,Android平台具有编码AMR及AAC的编码器,所以能够编码AMR及AAC格式的音频,Android 平台具有解码mp3的解码器,所以Android平台能够播放mp3,但是Android平台不能编码 mp3〇
[0005] 有鉴于此,本发明实施例有必要提供一种编码mp3的方法及编码mp3的设备,可以 实现在Android平台编码mp3的功能,进一步满足用户的在Android平台编码mp3的个性化需 求。

【发明内容】

[0006] 本发明实施例提供一种编码mp3的方法及编码mp3的设备,可以实现在Android平 台编码mp3的功能,进一步满足用户的在Android平台编码mp3的个性化需求。
[0007] 本发明实施例提供一种编码mp3的方法,包括:
[0008] 移植Lame 到 Android平台;
[0009] 编译所述移植后的Lame,建立编码mp3的JNI接口函数;
[0010] 使用所述JNI接口函数编码mp3文件。
[0011] 本发明实施例提供一种编码mp3的设备,包括:
[0012] 接口单元,用于移植Lame到Android平台;
[0013] 编译单元,用于编译所述移植后的Lame,建立编码mp3的JNI接口函数;
[0014]编码单元,用于使用所述JNI接口函数编码mp3文件。
[0015]本发明实施例提供的编码mp3的方法及编码mp3的设备,通过将Lame移植到 Android平台,并编译所述移植后的Lame,建立编码mp3的JNI接口函数,使用所述JNI接口函 数来编码mp3文件。从而可以实现在Android平台编码mp3的功能,进一步满足用户的在 Andr 〇 i d平台编码mp 3的个性化需求。
【附图说明】
[0016]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根 据这些附图获得其他的附图。
[0017]图1为本发明编码mp3的方法实施例的流程图;
[0018] 图2为本发明编码mp3的设备实施例的结构示意图。
【具体实施方式】
[0019] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020] Lame是一个开源的高质量的mp3编码开源库,其可以在linux系统上将原始音频数 据编码成mp3格式。Lame编码出来的MP3音色纯厚、空间宽广、低音清晰及细节表现良好。 Lame技术独创的心理音响模型技术保证了⑶音频还原的真实性,配合VBR和ABR参数,音质 几乎可以媲美CD音频,但文件体积却非常小。对于一个免费引擎,Lame的优势不言而喻。但 美中不足的是Lame没有Android版本,本发明实施例所提供的技术方案就是要将Lame移植 到Android平台上,利用Lame编码mp3的优势,得以实现在Android平台上编码mp3的功能,从 而可以实现在Android平台录制mp3,进一步满足用户在Android平台编码mp3的个性化需 求。
[0021] Lame编码开源库是用C语言编写的,将Lame移植到Android平台,Lame将作为 Android的一个底层库(即so库,动态链接库)的形式存在。将C语言的源码文件,编译成so 库,需要使用Android的编译工具,而Android编译工具编译源码的时候,需要找与源码文件 对应的编译文件,即Android.mk。编辑Android.mk文件,指定编译器如何编译Lamp库。同时 在Android, mk中指定编译为动态库,并进一步指定编译哪些源文件。由于Lame是使用C语言 编写的,因此本发明实施例所介绍的方法中将用到Java调用C的jni技术,即Android将通过 Jni技术调用这个底层so库。
[0022] 本发明实施例提供一种编码mp3的方法,包括:
[0023] 步骤11,移植Lame到Android平台;
[0024] 步骤13,编译所述移植后的Lame,建立编码mp3的JNI接口函数;
[0025]步骤15,使用所述JNI接口函数编码mp3文件。
[0026]本发明实施例提供的一种在An dr 〇 i d平台编码mp 3的方法,通过将Lame移植到 Android平台,并编译所述移植后的Lame,建立编码mp3的JNI接口函数,使用所述JNI接口函 数来编码mp3文件。从而可以实现在Android平台编码mp3的功能,从而可以实现在Android 平台录制mp3,进一步满足用户在Android平台编码mp3的个性化需求。
[0027] 进一步地,本发明实施例所述的在Android平台编码mp3的方法中,所述移植Lame 到Android平台包括:下载Lame的源码到ubuntu中;在ubuntu中建立Android ndk编译环境, 具体建立过程可参考谷歌(google)文档,这里不再重复描述,在所述ubuntu中建立jni的目 录,jni目录下建立source源目录,并将所述Lame的所有源文件拷贝到jni/source目录下; 在source同级目录下建立Application, mk文件和与所述源码对应的编译文件Android, mk 文件,其中,所述Application.mk文件标示将要链接的动态库路径及所述动态库的名称,所 述Android.mk文件用于编译时生成动态链接库libmp3lame . so。本发明实施例所述的在 Android平台编码mp3的方法中,所述方法进一步包括在jni同级目录下生成libs目录和obj 目录,并生成用于存放所述动态链接库1丨1311^3131116.80的1;^8/^1'1116313;[/1;[1311^3131116.80文 件。
[0028]进一步地,本发明实施例所述的在Android平台编码mp3的方法中,所述建立编码 mp3的JNI接口函数包括编码mp3的初始化函数mp3_init、mp3编码函数为mp3_encoder和编 5马mp 3的反初始化函数mp 3_un i n i t。
[0029]更进一步地,本发明实施例所述的在Android平台编码mp3的方法中,所述初始化 函数mp3_init包括所生成的mp3文件的目录及名字,声道数、采样率、码率;所述mp3编码函 数mp3_encoder包括原始音频数据131^€61~,131^€61'中音频数据的长度1611。采用本发明实施 例所述的方法,不仅可以实现在移动Android平台上编码mp3,并且可以根据用户自身的实 际需要来设置mp3的声道数、采样率和码率,由此采用本发明实施例所述的在Android平台 上编码mp3的方法编码的mp3更进一步满足用户的实际需要,编码的mp3更是满足用户的个 性化需求。并且,用户在Android平台的手机上可以录制mp3文件用于多媒体应用的开发。 [00 30]进一步地,本发明实施例所述的在Android平台编码mp3的方法中,使用所述JNI接 口函数编码mp3文件包括如下步骤:在所述Android平台的java层加载所述动态链接库 libmp31ame. so;调用所述初始化函数mp3_init指定生成mp3文件的路径,并指定编码参数; 启动录制接口,将采集的音频数据传给所述mp3编码函数mp3_encoder进行编码;调用所述 反初始化函数mp3_uninit释放资源,生成mp3文件。
[0031]根据本发明所述的在Android平台上编码mp3的方法实施例,具体实现过程可以分 为三个部分:1、移植Lame到Android平台;2、建立编码mp3的JNI接口函数;3、使用JNI接口函 数编码mp3文件。
[0032] 1、移植Lame 到 Android平台
[0033]首先,下载版本为3.99.5的lame源码,当然,也可以使用其他版本的Lame,本发明 实施例只是以3.99.5版本的Lame为例进行说明。本实施例中使用的Android编译平台为 ubuntulO.04,首先在ubuntu上建立一个名为jni的目录,jni下建立目录source,并将lame-3.99.5版本下的所 有文件拷贝到 jni/source 目录下。并在 source 同级目录下建立 Application.mk和与源码文件对应的编译文件Android.mk文件。其中,所述 Appl ication .mk文件标示将要链接的动态库路径及所述动态库的名称。
[0034] 所述App 1 ication. mk文件内容可以如下所示,作为Android. mk中的注释符:
[0035] 1,APP_PLATF0RM:=android-9
[0036] #第1行表示所使用的Android NDK平台版本为android-9;
[0037] 2.L0CAL_LDLIBS:=-L$(SYSR00T)/usr/1ib-1log
[0038] #第2行表示编译此模块将要链接系统的/usr/lib目录中的liblog.so库,所述 liblog.so库用于程序调试。
[0039]与源码文件对应的编译文件An dr 〇 i d . mk的内容可以如下所示,""作为 Andr 〇 i d. mk中的注释符: LOCAI._PATH := $(call my-di〇#表示获取当前路径 include $(CLEAR._VARS)#清除变量 LOCAL_C_INCLUDES+=\#&下为将要链接的头文件路径: $(LOCAL_PATI I)/source/ \ $(LOCAL_PATII)/source/libmp31ame \ $(LOCAL_PATI 1 )/source/rnpglib \ $( LOCAL PATH)/source/include L0CAL_CFLAGS:--DHAVE_C0NFIG_H=1 #设置 HAVE-C0NFIGJHN1; LOCAL_SRC_FILES:=W以下定义所要编译的源文件: source/1 ibrnp3iame/bitstream.c \ source/libmp3Iame/encoder.c \ source/libmp31ame/fft.c s o urc e/1 i b mp 31 ame/ ga i n_analy sis. c \ |-〇〇4〇j source/1 ibmp3 !ame/id3fag.c \ source/1 ibmp3lame/lame.c \ source/libmp31ame/mpglib_mterfacex \ s〇urce/libmp31ame/newmdctx \ source/1 ibmp31 ame/pi-esets.c \ source/1 ihrnp3lame/psymodel.c \ sourcc/1 ibmp31am.c/quantizc.c \ sourcc/libmp31airiC/quanti7C_pvt.G \ source/libmp31ame/reservoir.e \ so urc e/1 i b mp 3 i a me/ sel_get. c \ source/1 ibmp3lame/tabies.c \ source/libmp31ame/takehif o .e \ source/1 ibmp3lame/util.c \ source/1 ibmp3lame/vbrquaiitize.c \ sourc e/! i b mp 3 lame/VbrTag. c \ source/libmp31ame/Yersion. c \
[0041] soufce/mpglib/eommon.c \ source/inpg I i b/ dct64_ i 3 86. c \ source/mpglib'ciecode-i386,c \ source/mpgl ib/i interface. c \ source/mpglib/layer 1 .c \ so urce/mpg 1 ib/1 ayer2. c \ source/mpglib/'layerS.c \ sourGe/rapglib/tabinit.c \ sourcc/jni/I..og.cpp \ so u rc c/'j n i /I i b_on_J o a d. cpp so u rc c(j n i /l a m c」n i. cpp LOCAL_LDLIBS:-liog# 链接的库文件 LOCAL_MODULF.Hibmp3jamc#生成的动态链接库的名字,即 libmpSlame.so ; include $(BUILD_SHARED_UBRARY)#表示生成动态链接库;
[0042] 然后执行ndk-build,则将编译我们移植后的的Lame,并在jni同级目录下生成 libs目录和obj目录,并生成libs/armeabi/1 ibmp3 lame ? so,我们使用动态链接库 libmp31ame ? so 编码 mp3。
[0043] 2、建立编码mp3的JNI接口函数,以下代码建立在源文件lame_jni ? cpp中。 产 *封装一个mp3编码类 Glass Lame_encoder
[0044] { public: Lame_meoder(const char int channel, int samplerate, intbrate); ~Lame-enc,oder〇; int encode(jshort ^buffer, int len);
[0045] private: lame_t mLame; int mChannel; Int mSamplemte; int mRrate; }; * mp3编码类的构造函数,所述参数file表示建立的mp3文件的路径, 所述ehamiel表不.声道数,所述samplerate表_不采样率,所述brate表码率;: */ Lame_encoder::Lanie_encodei (const char *file, int channel, int samplerate, int brate) :mChannel(Ghamiel),mSamplerate(samplerate)^mBrate(brate) if(!file)//判断传入的文件路径是否有效 return; fmp3 = fopen(file,hwfef);//以参数file表示的文件路径建立mp3文件 if(!fmp.3) Log::d(ANDROin_LOG_FRROR, TAG, "filename error'\n"); 'mLame...= .lame 初始化 lame .lame_se.t-num_chaxmels{mJLame,mChannel):;//.设置声道.数. lame_sel_in_.sampjerale(mLame,mSamplerate);"设置采用率 kme_set_brate(mLame.,mBrate);//设置码率 if(mChannel==2) :l.£ime_setjT?ode(mL_e,§TEREO);//_设置为立体声模式 else lame_set_mode(roLanie, MONO); //设置为单声道 _lame_se.t_quality(mLame, 2);//设置编码质量 :lOTie_init_p._ai:ams(mLaine);//裉据 mLame 朝始化内§卩参数 } J* * mp3编码类的析构函数 V Lame_encoder; ;^Lame_e]iG〇der() I: lame_close(mLame);//关闭丨ame,并释放内部使用的缓存 if(fmp3) _fclose(fmp3)://关闭 mp3 女件 } * mp3编码类的编码函数 int Lame_encoder::encode{ jshort ^input int len) f int nb_write = 0;
[0046] " unsigned char output[BUFFF;lR_SIZF]; if(mChannel == 2) { int x=05y=0; short uulpulL[BUFFER_SIZE]; short outputR[BUFFER_SIZE]; for(x=0? y=(); x<len;x+=2,y++) { outputL[y] = input[x]; outputR[y] = input[x+l]; } //调用lame_encode_buffer对原始音频数据进行编码 nb_vvrite~iame_encode_buffer(mLame,QutputL,outputR.len/2,output, BUFFER_SIZE);
[0047] } else { nb_write = lame__encode_buffer(mLame, input, NULL, leu, output, BUFFER_SIZE); t'write(output,. 1, n_b_write,fmp3):/7将编码后的数据,写入 _mp3 文件。 } /* *定义一个指向mp3编码类的指针,并初始化为NULL Lame_ene€>der *plame_encoder=NULL; 芦以下为具体的JNT接口函数,/ ./弟 *编码mp3的初始化函数中,所述参数file表示要生成的mp3的路径, 所述channe丨表示mp3编码的声道数,所述sampleRate表示mp3编码的采用 率:,所述bm.te表示mp3编码的码率。 */ static int mp3_init(JNIEnv *env, jobject obj, jstring file, jint channel, jini sampleRate, jint brate) { const char ^filename = NULL; if(channel != 1 && channel != 2) return ERROR PARAM; if (file == NULL) { jmThra.wExc:eption(e'n'v,''java/lmg/inegalArgiimentExceptioii'';, nuix); return CRROR PARAM; } if((filename = (char ^)env->GetStniigUTFCiiars(file? NULL)) NULL)
[0048] Log: :d(ANDR〇[D_LOG_ERROR, TAG, "filename is NULL!\n"); return ERROR_PARAN4; } plamc encoder = new Lame _cncodcr(filename, channel, samplcRatc, brate); if'(!plame_encoder) return ERROR_LAME, return U.RROR_OK; } /* * mp3编码的反初始化函数,用于释放已分配的资源 净, static void mp3_uninit(JNIEnv *env, jobject obj) i f(p 1 arne_en coder) delete plame_eneoder; } 卜 * mp3编码函数,其中参数buffer是原始音频数据,参数len是buffer 中原始音频数据的长度 '务I. sialic int mp3_encoder(JNIEnv jobject obj, jbhorlArray buiTer, jinl len) jshort ^input ^ env->GetSh0itArrayE1ements(bufYer, NULL); plamc_cncodcr->cncodc(input len); env->ReleaseShortArrayliiements(buffei\ input, 0); return ERROR_OK; }
[0049] /* *定义结构,则在Android java层可以定义名为mp3_init的初始化函数, 名为mp3_uninit的反初始化函数,名为mp3_cncodcr的用于接收采集到的原 始音频并进行编码的函数 V static JNINativeMethod gN4ethods[] = { "(Ljava/lang/String;lII)r', (void *)mp3」nit}, {"mp3_uninit", "〇V", (void :!;)mp3_uninit}, ("mp3_encoder", "([SI)I", (void *)mp3_encoder},
[0050] 上述代码中,编码mp3的初始化函数为:mp3_init,所述初始化函数mp3_init的参 数可以分别包括所生成的mp3文件的目录及名字、声道数、采样率和码率;mp3编码函数为 mp3_encoder,所述mp3编码函数mp3_encoder参数可以分别包括原始音频数据buffer和 buff er中音频数据的长度1 en。
[0051 ] 本发明实施例提供一种编码mp3的设备,包括接口单元21、编译单元23和编码单元 25。其中,所述接口单元21用于移植Lame到Android平台;所述编译单元23用于编译所述移 植后的Lame,建立编码mp3的JNI接口函数;所述编码单元25用于使用所述JNI接口函数编码 mp3文件。
[0052]本发明实施例提供的一种编码mp3的设备,通过所述接口单元21将Lame移植到 Android平台,并由编译单元23编译所述移植后的Lame,建立编码mp3的JNI接口函数,所述 编码单元25使用所述JNI接口函数来编码mp3文件。从而可以实现在Android平台编码mp3的 功能,从而可以实现在Android平台录制mp3,进一步满足用户在Android平台编码mp3的个 性化需求。
[0053 ]根据本发明实施例所提供的在Andro i d平台编码mp3的设备,所述接口单元21移植 Lame到Andro i d平台的步骤可以进一步包括:下载Lame的源码到ubun tu中;在ubuntu中建立 Android ndk编译环境,具体建立过程可参考谷歌(google)文档,这里不再重复描述,在 ubuntu中建立jni的目录,jni目录下建立source源目录,并将所述Lame的所有文件拷贝到 jni/source目录下;在source同级目录下建立Application .mk文件和与所述源码对应的编 译文件Android.mk文件,其中,所述Application.mk文件标示将要链接的动态库路径及所 述动态库的名称,所述4]1(11'〇1(1.1]^文件将用于编译生成动态链接库1;[1311^3131]16.80 0 [OOM]根据本发明实施例所提供的在Andro i d平台编码mp3的设备,所述接口单元21可以 进一步包括编译时在jni同级目录下生成libs目录和obj目录,并生成用于存放所述动态链 l^j^libmpSlame.sc^libs/armeabi/libmpSlame.sc^i^K
[OO55 ]根据本发明实施例所提供的在Andro i d平台编码mp 3的设备,所述编码mp 3的JNI接 口函数可以进一步包括编码mp3的初始化函数mp3_init、所述mp3编码函数mp3_encoder和 编码mp3的反初始化函数mp3_uninit。
[0056]进一步地,根据本发明实施例所提供的在Android平台编码mp3的设备,所述初始 化函数mp3_init的参数包括所生成的mp3文件的目录及名字,声道数、采样率、码率;所述 mp3编码函数mp3_encoder的参数包括原始音频数据131^€61~,131^€61'中音频数据的长度1611。 [0057]根据本发明实施例所提供的在Android平台编码mp3的设备,所述编码单元使用所 述JNI接口函数编码mp3文件可以进一步包括如下步骤:在所述Android平台的java层加载 所述动态链接库libmp31ame ? so;调用所述初始化函数mp3_init指定生成mp3文件的路径, 并指定编码参数;启动录制接口,将采集的音频数据传给所述mp3编码函数mp3_encoder进 行编码;调用所述反初始化函数mp3_uninit释放资源,生成mp3文件。
[0058] 本发明实施例所述的一种在Android平台编码mp3可以通过硬件处理器来实现相 关功能。所述硬件处理器在执行本发明实施例提供的一种在Android平台编码mp3的方法, 可以包括如下处理:步骤11,移植Lame到Android平台;步骤13,编译所述移植后的Lame,建 立编码mp3的JNI接口函数;步骤15,使用所述JNI接口函数编码mp3文件。本发明实施例提供 的一种在Android平台编码mp3的方法,通过将Lame移植到Android平台,并编译所述移植后 的Lame,建立编码mp3的JNI接口函数,使用所述JNI接口函数来编码mp3文件。从而可以实现 在Android平台编码mp3的功能,从而可以实现在An droid平台录制mp3,进一步满足用户在 Andr 〇 i d平台编码mp 3的个性化需求。
[0059] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 的劳动的情况下,即可以理解并实施。
[0060] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可 借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上 述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该 计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指 令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施 例或者实施例的某些部分所述的方法。
[0061] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管 参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可 以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换; 而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和 范围。
【主权项】
1. 一种编码mp3的方法,其特征在于,包括: 移植Lame到Android平台; 编译所述移植后的Lame,建立编码mp3的JNI接口函数; 使用所述JNI接口函数编码mp3文件。2. 根据权利要求1所述的方法,其特征在于, 进一步地,所述移植Lame到Andro id平台包括: 下载Lame的源码到ubuntu中,在ubuntu中建立Android ndk编译环境; 在所述ubuntu中建立jni的目录,jni目录下建立source源目录,并将所述lame的所有 源文件拷贝到jni/source目录下; 在source同级目录下建立Application.mk文件和与所述源码对应的编译文件 Android.mk,其中,所述Application.mk文件标示将要链接的动态库路径及所述动态库的 名称,所述4]1(11'〇1(1.1]11^文件用于将源文件生成动态链接库1;[1311^|3131]16.80 03. 根据权利要求2所述的方法,其特征在于, 所述方法进一步包括在jni同级目录下生成libs目录和obj目录,并生成用于存放所述 动态链接库1让11^)31&1116.80的1让8/&1'1116&13;[/1;[1311^)31&1116.80文件 。4. 根据权利要求2所述的方法,其特征在于, 进一步地,所述编码mp3的JNI接口函数包括编码mp3的初始化函数mp3_init、mp3编码 函数mp3_encoder和编码mp3的反初始化函数mp3_uninit。5. 根据权利要求4所述的方法,其特征在于, 进一步地, 所述初始化函数mp3_init的参数包括所生成的mp3文件的目录及名字,声道数、采样 率、码率; 所述mp3编码函数mp3_encoder的参数包括原始音频数据buffer ,buffer中音频数据的 长度len。6. 根据权利要求4所述的方法,其特征在于, 进一步地,使用所述JNI接口函数编码mp3文件包括如下步骤: 在所述Android平台的java层加载所述动态链接库I ibmp31ame · so; 调用所述初始化函数mp3_init指定生成mp3文件的路径,并指定编码参数; 启动录制接口,将采集的音频数据传给所述mp3编码函数mp3_encoder进行编码; 调用所述反初始化函数mp3_uninit释放资源,生成mp3文件。7. -种编码mp3的设备,其特征在于,包括: 接口单元,用于移植Lame到Android平台; 编译单元,用于编译所述移植后的Lame,建立编码mp3的JNI接口函数; 编码单元,用于使用所述JNI接口函数编码mp3文件。8. 根据权利要求7所述的设备,其特征在于, 所述接口单元用于移植Lame到Andro i d平台进一步包括: 下载Lame的源码到ubuntu中,在ubuntu中建立Android ndk编译环境,; 在所述ubuntu中建立jni的目录,jni目录下建立source源目录,并将所述lame的所有 文件拷贝到jni/source目录下; 在source同级目录下建立Application.mk文件和与所述源码对应的编译文件 Android. mk文件,其中,所述Appl i cat ion. mk文件标示将要链接的动态库路径及所述动态 库的名称,所述4]1(11'〇1(1.1]11^文件用于将源文件生成动态链接库1;[1311^|3131]16.80。9. 根据权利要求8所述的设备,其特征在于, 所述接口单元进一步用于在jni同级目录下生成libs目录和obj目录,并生成用于存放 所述动态链接库1让11^)31&1116.80的1让8/&1'1116&13;[/1;[1311^)31&1116.80文件 。10. 根据权利要求8所述的设备,其特征在于, 进一步地,所述编码mp3的JNI接口函数包括编码mp3的初始化函数mp3_init、所述mp3 编码函数mp3_encoder和编码mp3的反初始化函数mp3_uninit〇11. 根据权利要求10所述的设备,其特征在于, 进一步地, 所述初始化函数mp3_init的参数包括所生成的mp3文件的目录及名字,声道数、采样 率、码率; 所述mp3编码函数mp3_encoder的参数包括原始音频数据buffer ,buffer中音频数据的 长度len。12. 根据权利要求10所述的设备,其特征在于, 进一步地,所述编码单元使用所述JNI接口函数编码mp3文件包括如下步骤: 在所述Android平台的java层加载所述动态链接库I ibmp31ame · so; 调用所述初始化函数mp3_init指定生成mp3文件的路径,并指定编码参数; 启动录制接口,将采集的音频数据传给所述mp3编码函数mp3_encoder进行编码; 调用所述反初始化函数mp3_uninit释放资源,生成mp3文件。
【文档编号】G06F9/45GK105912377SQ201510921380
【公开日】2016年8月31日
【申请日】2015年12月13日
【发明人】李先彪
【申请人】乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1