編碼mp3的方法及編碼mp3的設(shè)備的制造方法
【專利摘要】本發(fā)明實(shí)施例提供一種編碼mp3的方法及編碼mp3的設(shè)備。所述方法包括移植Lame到Android平臺;編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù);使用所述JNI接口函數(shù)編碼mp3文件。本發(fā)明實(shí)施例所提供的Android平臺編碼mp3的方法及在Android平臺編碼mp3的設(shè)備,通過將Lame移植到Android平臺,并編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù),使用所述JNI接口函數(shù)來編碼mp3文件。從而可以實(shí)現(xiàn)在Android平臺編碼mp3的功能,進(jìn)一步滿足用戶的在Android平臺編碼mp3的個(gè)性化需求。
【專利說明】
編碼mp3的方法及編碼mp3的設(shè)備
技術(shù)領(lǐng)域
[0001 ]本發(fā)明實(shí)施例涉及Android平臺技術(shù)領(lǐng)域,尤其涉及一種編碼mp3的方法及編碼 mp3的設(shè)備。
【背景技術(shù)】
[0002] Mp3是一種壓縮的音頻格式。MP3的全稱是Moving Picture Experts Group,Audio Layer III(移動圖像專家組音頻第三層),它所使用的技術(shù)是在V⑶(MPEG-1)的音頻壓縮技 術(shù)上發(fā)展出的第三代。MP3是開始于1980年代中期(1987)的一種音頻壓縮的國際技術(shù)標(biāo)準(zhǔn), 致力于高質(zhì)量、低數(shù)據(jù)率的聲音編碼。MP3的突出優(yōu)點(diǎn)是:壓縮比高、音質(zhì)較好、制作簡單及 交流方便。音質(zhì)是人們關(guān)心的一個(gè)焦點(diǎn)。但最吸引人的還是MP3制作和交流上的方便。只要 有一臺電腦,就可將⑶節(jié)目錄入電腦硬盤,然后壓制成MP3格式。也可直接從Internet網(wǎng)上 下載MP3音樂,網(wǎng)上有取之不盡用之不竭的MP3音樂。用戶還可以把自己制作的MP3音樂上網(wǎng) 交流??傊己玫囊糍|(zhì)和豐富的節(jié)目源將使MP3成為最佳的大眾音樂媒體。
[0003] Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè) 備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。尚未有統(tǒng)一中文名 稱,中國大陸地區(qū)較多人使用"安卓"或"安致"。Android操作系統(tǒng)最初由Andy Rubin開發(fā), 主要支持手機(jī)。之后Google收購注資,并且與84家硬件制造商、軟件開發(fā)商及電信運(yùn)營商組 建開放手機(jī)聯(lián)盟共同研發(fā)改良的Android系統(tǒng)。Android逐漸從智能手機(jī)擴(kuò)展到平板電腦及 其他領(lǐng)域上,如電視、數(shù)碼相機(jī)、游戲機(jī)等。
[0004] Android平臺是現(xiàn)在非常流行的一種移動平臺,而其上豐富的多媒體模塊是其優(yōu) 勢之一。且Android平臺的多媒體模塊可以解碼多種音視頻格式。在編碼(即錄制)音頻方 面,Android平臺具有編碼AMR及AAC的編碼器,所以能夠編碼AMR及AAC格式的音頻,Android 平臺具有解碼mp3的解碼器,所以Android平臺能夠播放mp3,但是Android平臺不能編碼 mp3〇
[0005] 有鑒于此,本發(fā)明實(shí)施例有必要提供一種編碼mp3的方法及編碼mp3的設(shè)備,可以 實(shí)現(xiàn)在Android平臺編碼mp3的功能,進(jìn)一步滿足用戶的在Android平臺編碼mp3的個(gè)性化需 求。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明實(shí)施例提供一種編碼mp3的方法及編碼mp3的設(shè)備,可以實(shí)現(xiàn)在Android平 臺編碼mp3的功能,進(jìn)一步滿足用戶的在Android平臺編碼mp3的個(gè)性化需求。
[0007] 本發(fā)明實(shí)施例提供一種編碼mp3的方法,包括:
[0008] 移植Lame 到 Android平臺;
[0009] 編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù);
[0010] 使用所述JNI接口函數(shù)編碼mp3文件。
[0011] 本發(fā)明實(shí)施例提供一種編碼mp3的設(shè)備,包括:
[0012] 接口單元,用于移植Lame到Android平臺;
[0013] 編譯單元,用于編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù);
[0014]編碼單元,用于使用所述JNI接口函數(shù)編碼mp3文件。
[0015]本發(fā)明實(shí)施例提供的編碼mp3的方法及編碼mp3的設(shè)備,通過將Lame移植到 Android平臺,并編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù),使用所述JNI接口函 數(shù)來編碼mp3文件。從而可以實(shí)現(xiàn)在Android平臺編碼mp3的功能,進(jìn)一步滿足用戶的在 Andr 〇 i d平臺編碼mp 3的個(gè)性化需求。
【附圖說明】
[0016]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā) 明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根 據(jù)這些附圖獲得其他的附圖。
[0017]圖1為本發(fā)明編碼mp3的方法實(shí)施例的流程圖;
[0018] 圖2為本發(fā)明編碼mp3的設(shè)備實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0019] 為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例 中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是 本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員 在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0020] Lame是一個(gè)開源的高質(zhì)量的mp3編碼開源庫,其可以在linux系統(tǒng)上將原始音頻數(shù) 據(jù)編碼成mp3格式。Lame編碼出來的MP3音色純厚、空間寬廣、低音清晰及細(xì)節(jié)表現(xiàn)良好。 Lame技術(shù)獨(dú)創(chuàng)的心理音響模型技術(shù)保證了⑶音頻還原的真實(shí)性,配合VBR和ABR參數(shù),音質(zhì) 幾乎可以媲美CD音頻,但文件體積卻非常小。對于一個(gè)免費(fèi)引擎,Lame的優(yōu)勢不言而喻。但 美中不足的是Lame沒有Android版本,本發(fā)明實(shí)施例所提供的技術(shù)方案就是要將Lame移植 到Android平臺上,利用Lame編碼mp3的優(yōu)勢,得以實(shí)現(xiàn)在Android平臺上編碼mp3的功能,從 而可以實(shí)現(xiàn)在Android平臺錄制mp3,進(jìn)一步滿足用戶在Android平臺編碼mp3的個(gè)性化需 求。
[0021] Lame編碼開源庫是用C語言編寫的,將Lame移植到Android平臺,Lame將作為 Android的一個(gè)底層庫(即so庫,動態(tài)鏈接庫)的形式存在。將C語言的源碼文件,編譯成so 庫,需要使用Android的編譯工具,而Android編譯工具編譯源碼的時(shí)候,需要找與源碼文件 對應(yīng)的編譯文件,即Android.mk。編輯Android.mk文件,指定編譯器如何編譯Lamp庫。同時(shí) 在Android, mk中指定編譯為動態(tài)庫,并進(jìn)一步指定編譯哪些源文件。由于Lame是使用C語言 編寫的,因此本發(fā)明實(shí)施例所介紹的方法中將用到Java調(diào)用C的jni技術(shù),即Android將通過 Jni技術(shù)調(diào)用這個(gè)底層so庫。
[0022] 本發(fā)明實(shí)施例提供一種編碼mp3的方法,包括:
[0023] 步驟11,移植Lame到Android平臺;
[0024] 步驟13,編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù);
[0025]步驟15,使用所述JNI接口函數(shù)編碼mp3文件。
[0026]本發(fā)明實(shí)施例提供的一種在An dr 〇 i d平臺編碼mp 3的方法,通過將Lame移植到 Android平臺,并編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù),使用所述JNI接口函 數(shù)來編碼mp3文件。從而可以實(shí)現(xiàn)在Android平臺編碼mp3的功能,從而可以實(shí)現(xiàn)在Android 平臺錄制mp3,進(jìn)一步滿足用戶在Android平臺編碼mp3的個(gè)性化需求。
[0027] 進(jìn)一步地,本發(fā)明實(shí)施例所述的在Android平臺編碼mp3的方法中,所述移植Lame 到Android平臺包括:下載Lame的源碼到ubuntu中;在ubuntu中建立Android ndk編譯環(huán)境, 具體建立過程可參考谷歌(google)文檔,這里不再重復(fù)描述,在所述ubuntu中建立jni的目 錄,jni目錄下建立source源目錄,并將所述Lame的所有源文件拷貝到j(luò)ni/source目錄下; 在source同級目錄下建立Application, mk文件和與所述源碼對應(yīng)的編譯文件Android, mk 文件,其中,所述Application.mk文件標(biāo)示將要鏈接的動態(tài)庫路徑及所述動態(tài)庫的名稱,所 述Android.mk文件用于編譯時(shí)生成動態(tài)鏈接庫libmp3lame . so。本發(fā)明實(shí)施例所述的在 Android平臺編碼mp3的方法中,所述方法進(jìn)一步包括在jni同級目錄下生成libs目錄和obj 目錄,并生成用于存放所述動態(tài)鏈接庫1丨1311^3131116.80的1;^8/^1'1116313;[/1;[1311^3131116.80文 件。
[0028]進(jìn)一步地,本發(fā)明實(shí)施例所述的在Android平臺編碼mp3的方法中,所述建立編碼 mp3的JNI接口函數(shù)包括編碼mp3的初始化函數(shù)mp3_init、mp3編碼函數(shù)為mp3_encoder和編 5馬mp 3的反初始化函數(shù)mp 3_un i n i t。
[0029]更進(jìn)一步地,本發(fā)明實(shí)施例所述的在Android平臺編碼mp3的方法中,所述初始化 函數(shù)mp3_init包括所生成的mp3文件的目錄及名字,聲道數(shù)、采樣率、碼率;所述mp3編碼函 數(shù)mp3_encoder包括原始音頻數(shù)據(jù)131^€61~,131^€61'中音頻數(shù)據(jù)的長度1611。采用本發(fā)明實(shí)施 例所述的方法,不僅可以實(shí)現(xiàn)在移動Android平臺上編碼mp3,并且可以根據(jù)用戶自身的實(shí) 際需要來設(shè)置mp3的聲道數(shù)、采樣率和碼率,由此采用本發(fā)明實(shí)施例所述的在Android平臺 上編碼mp3的方法編碼的mp3更進(jìn)一步滿足用戶的實(shí)際需要,編碼的mp3更是滿足用戶的個(gè) 性化需求。并且,用戶在Android平臺的手機(jī)上可以錄制mp3文件用于多媒體應(yīng)用的開發(fā)。 [00 30]進(jìn)一步地,本發(fā)明實(shí)施例所述的在Android平臺編碼mp3的方法中,使用所述JNI接 口函數(shù)編碼mp3文件包括如下步驟:在所述Android平臺的java層加載所述動態(tài)鏈接庫 libmp31ame. so;調(diào)用所述初始化函數(shù)mp3_init指定生成mp3文件的路徑,并指定編碼參數(shù); 啟動錄制接口,將采集的音頻數(shù)據(jù)傳給所述mp3編碼函數(shù)mp3_encoder進(jìn)行編碼;調(diào)用所述 反初始化函數(shù)mp3_uninit釋放資源,生成mp3文件。
[0031]根據(jù)本發(fā)明所述的在Android平臺上編碼mp3的方法實(shí)施例,具體實(shí)現(xiàn)過程可以分 為三個(gè)部分:1、移植Lame到Android平臺;2、建立編碼mp3的JNI接口函數(shù);3、使用JNI接口函 數(shù)編碼mp3文件。
[0032] 1、移植Lame 到 Android平臺
[0033]首先,下載版本為3.99.5的lame源碼,當(dāng)然,也可以使用其他版本的Lame,本發(fā)明 實(shí)施例只是以3.99.5版本的Lame為例進(jìn)行說明。本實(shí)施例中使用的Android編譯平臺為 ubuntulO.04,首先在ubuntu上建立一個(gè)名為jni的目錄,jni下建立目錄source,并將lame-3.99.5版本下的所 有文件拷貝到 jni/source 目錄下。并在 source 同級目錄下建立 Application.mk和與源碼文件對應(yīng)的編譯文件Android.mk文件。其中,所述 Appl ication .mk文件標(biāo)示將要鏈接的動態(tài)庫路徑及所述動態(tài)庫的名稱。
[0034] 所述App 1 ication. mk文件內(nèi)容可以如下所示,作為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行表示編譯此模塊將要鏈接系統(tǒng)的/usr/lib目錄中的liblog.so庫,所述 liblog.so庫用于程序調(diào)試。
[0039]與源碼文件對應(yīng)的編譯文件An dr 〇 i d . mk的內(nèi)容可以如下所示,""作為 Andr 〇 i d. mk中的注釋符: LOCAI._PATH := $(call my-di〇#表示獲取當(dāng)前路徑 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 #設(shè)置 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#生成的動態(tài)鏈接庫的名字,即 libmpSlame.so ; include $(BUILD_SHARED_UBRARY)#表示生成動態(tài)鏈接庫;
[0042] 然后執(zhí)行ndk-build,則將編譯我們移植后的的Lame,并在jni同級目錄下生成 libs目錄和obj目錄,并生成libs/armeabi/1 ibmp3 lame ? so,我們使用動態(tài)鏈接庫 libmp31ame ? so 編碼 mp3。
[0043] 2、建立編碼mp3的JNI接口函數(shù),以下代碼建立在源文件lame_jni ? cpp中。 產(chǎn) *封裝一個(gè)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編碼類的構(gòu)造函數(shù),所述參數(shù)file表示建立的mp3文件的路徑, 所述ehamiel表不.聲道數(shù),所述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);//以參數(shù)file表示的文件路徑建立mp3文件 if(!fmp.3) Log::d(ANDROin_LOG_FRROR, TAG, "filename error'\n"); 'mLame...= .lame 初始化 lame .lame_se.t-num_chaxmels{mJLame,mChannel):;//.設(shè)置聲道.數(shù). lame_sel_in_.sampjerale(mLame,mSamplerate);"設(shè)置采用率 kme_set_brate(mLame.,mBrate);//設(shè)置碼率 if(mChannel==2) :l.£ime_setjT?ode(mL_e,§TEREO);//_設(shè)置為立體聲模式 else lame_set_mode(roLanie, MONO); //設(shè)置為單聲道 _lame_se.t_quality(mLame, 2);//設(shè)置編碼質(zhì)量 :lOTie_init_p._ai:ams(mLaine);//裉據(jù) mLame 朝始化內(nèi)§卩參數(shù) } J* * mp3編碼類的析構(gòu)函數(shù) V Lame_encoder; ;^Lame_e]iG〇der() I: lame_close(mLame);//關(guān)閉丨ame,并釋放內(nèi)部使用的緩存 if(fmp3) _fclose(fmp3)://關(guān)閉 mp3 女件 } * mp3編碼類的編碼函數(shù) 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]; } //調(diào)用lame_encode_buffer對原始音頻數(shù)據(jù)進(jìn)行編碼 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將編碼后的數(shù)據(jù),寫入 _mp3 文件。 } /* *定義一個(gè)指向mp3編碼類的指針,并初始化為NULL Lame_ene€>der *plame_encoder=NULL; 蘆以下為具體的JNT接口函數(shù),/ ./弟 *編碼mp3的初始化函數(shù)中,所述參數(shù)file表示要生成的mp3的路徑, 所述channe丨表示mp3編碼的聲道數(shù),所述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編碼的反初始化函數(shù),用于釋放已分配的資源 凈, static void mp3_uninit(JNIEnv *env, jobject obj) i f(p 1 arne_en coder) delete plame_eneoder; } 卜 * mp3編碼函數(shù),其中參數(shù)buffer是原始音頻數(shù)據(jù),參數(shù)len是buffer 中原始音頻數(shù)據(jù)的長度 '務(wù)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] /* *定義結(jié)構(gòu),則在Android java層可以定義名為mp3_init的初始化函數(shù), 名為mp3_uninit的反初始化函數(shù),名為mp3_cncodcr的用于接收采集到的原 始音頻并進(jìn)行編碼的函數(shù) 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的初始化函數(shù)為:mp3_init,所述初始化函數(shù)mp3_init的參 數(shù)可以分別包括所生成的mp3文件的目錄及名字、聲道數(shù)、采樣率和碼率;mp3編碼函數(shù)為 mp3_encoder,所述mp3編碼函數(shù)mp3_encoder參數(shù)可以分別包括原始音頻數(shù)據(jù)buffer和 buff er中音頻數(shù)據(jù)的長度1 en。
[0051 ] 本發(fā)明實(shí)施例提供一種編碼mp3的設(shè)備,包括接口單元21、編譯單元23和編碼單元 25。其中,所述接口單元21用于移植Lame到Android平臺;所述編譯單元23用于編譯所述移 植后的Lame,建立編碼mp3的JNI接口函數(shù);所述編碼單元25用于使用所述JNI接口函數(shù)編碼 mp3文件。
[0052]本發(fā)明實(shí)施例提供的一種編碼mp3的設(shè)備,通過所述接口單元21將Lame移植到 Android平臺,并由編譯單元23編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù),所述 編碼單元25使用所述JNI接口函數(shù)來編碼mp3文件。從而可以實(shí)現(xiàn)在Android平臺編碼mp3的 功能,從而可以實(shí)現(xiàn)在Android平臺錄制mp3,進(jìn)一步滿足用戶在Android平臺編碼mp3的個(gè) 性化需求。
[0053 ]根據(jù)本發(fā)明實(shí)施例所提供的在Andro i d平臺編碼mp3的設(shè)備,所述接口單元21移植 Lame到Andro i d平臺的步驟可以進(jìn)一步包括:下載Lame的源碼到ubun tu中;在ubuntu中建立 Android ndk編譯環(huán)境,具體建立過程可參考谷歌(google)文檔,這里不再重復(fù)描述,在 ubuntu中建立jni的目錄,jni目錄下建立source源目錄,并將所述Lame的所有文件拷貝到 jni/source目錄下;在source同級目錄下建立Application .mk文件和與所述源碼對應(yīng)的編 譯文件Android.mk文件,其中,所述Application.mk文件標(biāo)示將要鏈接的動態(tài)庫路徑及所 述動態(tài)庫的名稱,所述4]1(11'〇1(1.1]^文件將用于編譯生成動態(tài)鏈接庫1;[1311^3131]16.80 0 [OOM]根據(jù)本發(fā)明實(shí)施例所提供的在Andro i d平臺編碼mp3的設(shè)備,所述接口單元21可以 進(jìn)一步包括編譯時(shí)在jni同級目錄下生成libs目錄和obj目錄,并生成用于存放所述動態(tài)鏈 l^j^libmpSlame.sc^libs/armeabi/libmpSlame.sc^i^K
[OO55 ]根據(jù)本發(fā)明實(shí)施例所提供的在Andro i d平臺編碼mp 3的設(shè)備,所述編碼mp 3的JNI接 口函數(shù)可以進(jìn)一步包括編碼mp3的初始化函數(shù)mp3_init、所述mp3編碼函數(shù)mp3_encoder和 編碼mp3的反初始化函數(shù)mp3_uninit。
[0056]進(jìn)一步地,根據(jù)本發(fā)明實(shí)施例所提供的在Android平臺編碼mp3的設(shè)備,所述初始 化函數(shù)mp3_init的參數(shù)包括所生成的mp3文件的目錄及名字,聲道數(shù)、采樣率、碼率;所述 mp3編碼函數(shù)mp3_encoder的參數(shù)包括原始音頻數(shù)據(jù)131^€61~,131^€61'中音頻數(shù)據(jù)的長度1611。 [0057]根據(jù)本發(fā)明實(shí)施例所提供的在Android平臺編碼mp3的設(shè)備,所述編碼單元使用所 述JNI接口函數(shù)編碼mp3文件可以進(jìn)一步包括如下步驟:在所述Android平臺的java層加載 所述動態(tài)鏈接庫libmp31ame ? so;調(diào)用所述初始化函數(shù)mp3_init指定生成mp3文件的路徑, 并指定編碼參數(shù);啟動錄制接口,將采集的音頻數(shù)據(jù)傳給所述mp3編碼函數(shù)mp3_encoder進(jìn) 行編碼;調(diào)用所述反初始化函數(shù)mp3_uninit釋放資源,生成mp3文件。
[0058] 本發(fā)明實(shí)施例所述的一種在Android平臺編碼mp3可以通過硬件處理器來實(shí)現(xiàn)相 關(guān)功能。所述硬件處理器在執(zhí)行本發(fā)明實(shí)施例提供的一種在Android平臺編碼mp3的方法, 可以包括如下處理:步驟11,移植Lame到Android平臺;步驟13,編譯所述移植后的Lame,建 立編碼mp3的JNI接口函數(shù);步驟15,使用所述JNI接口函數(shù)編碼mp3文件。本發(fā)明實(shí)施例提供 的一種在Android平臺編碼mp3的方法,通過將Lame移植到Android平臺,并編譯所述移植后 的Lame,建立編碼mp3的JNI接口函數(shù),使用所述JNI接口函數(shù)來編碼mp3文件。從而可以實(shí)現(xiàn) 在Android平臺編碼mp3的功能,從而可以實(shí)現(xiàn)在An droid平臺錄制mp3,進(jìn)一步滿足用戶在 Andr 〇 i d平臺編碼mp 3的個(gè)性化需求。
[0059] 以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可 以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單 元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其 中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性 的勞動的情況下,即可以理解并實(shí)施。
[0060] 通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可 借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上 述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該 計(jì)算機(jī)軟件產(chǎn)品可以存儲在計(jì)算機(jī)可讀存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指 令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施 例或者實(shí)施例的某些部分所述的方法。
[0061] 最后應(yīng)說明的是:以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管 參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可 以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換; 而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和 范圍。
【主權(quán)項(xiàng)】
1. 一種編碼mp3的方法,其特征在于,包括: 移植Lame到Android平臺; 編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù); 使用所述JNI接口函數(shù)編碼mp3文件。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 進(jìn)一步地,所述移植Lame到Andro id平臺包括: 下載Lame的源碼到ubuntu中,在ubuntu中建立Android ndk編譯環(huán)境; 在所述ubuntu中建立jni的目錄,jni目錄下建立source源目錄,并將所述lame的所有 源文件拷貝到j(luò)ni/source目錄下; 在source同級目錄下建立Application.mk文件和與所述源碼對應(yīng)的編譯文件 Android.mk,其中,所述Application.mk文件標(biāo)示將要鏈接的動態(tài)庫路徑及所述動態(tài)庫的 名稱,所述4]1(11'〇1(1.1]11^文件用于將源文件生成動態(tài)鏈接庫1;[1311^|3131]16.80 03. 根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述方法進(jìn)一步包括在jni同級目錄下生成libs目錄和obj目錄,并生成用于存放所述 動態(tài)鏈接庫1讓11^)31&1116.80的1讓8/&1'1116&13;[/1;[1311^)31&1116.80文件 。4. 根據(jù)權(quán)利要求2所述的方法,其特征在于, 進(jìn)一步地,所述編碼mp3的JNI接口函數(shù)包括編碼mp3的初始化函數(shù)mp3_init、mp3編碼 函數(shù)mp3_encoder和編碼mp3的反初始化函數(shù)mp3_uninit。5. 根據(jù)權(quán)利要求4所述的方法,其特征在于, 進(jìn)一步地, 所述初始化函數(shù)mp3_init的參數(shù)包括所生成的mp3文件的目錄及名字,聲道數(shù)、采樣 率、碼率; 所述mp3編碼函數(shù)mp3_encoder的參數(shù)包括原始音頻數(shù)據(jù)buffer ,buffer中音頻數(shù)據(jù)的 長度len。6. 根據(jù)權(quán)利要求4所述的方法,其特征在于, 進(jìn)一步地,使用所述JNI接口函數(shù)編碼mp3文件包括如下步驟: 在所述Android平臺的java層加載所述動態(tài)鏈接庫I ibmp31ame · so; 調(diào)用所述初始化函數(shù)mp3_init指定生成mp3文件的路徑,并指定編碼參數(shù); 啟動錄制接口,將采集的音頻數(shù)據(jù)傳給所述mp3編碼函數(shù)mp3_encoder進(jìn)行編碼; 調(diào)用所述反初始化函數(shù)mp3_uninit釋放資源,生成mp3文件。7. -種編碼mp3的設(shè)備,其特征在于,包括: 接口單元,用于移植Lame到Android平臺; 編譯單元,用于編譯所述移植后的Lame,建立編碼mp3的JNI接口函數(shù); 編碼單元,用于使用所述JNI接口函數(shù)編碼mp3文件。8. 根據(jù)權(quán)利要求7所述的設(shè)備,其特征在于, 所述接口單元用于移植Lame到Andro i d平臺進(jìn)一步包括: 下載Lame的源碼到ubuntu中,在ubuntu中建立Android ndk編譯環(huán)境,; 在所述ubuntu中建立jni的目錄,jni目錄下建立source源目錄,并將所述lame的所有 文件拷貝到j(luò)ni/source目錄下; 在source同級目錄下建立Application.mk文件和與所述源碼對應(yīng)的編譯文件 Android. mk文件,其中,所述Appl i cat ion. mk文件標(biāo)示將要鏈接的動態(tài)庫路徑及所述動態(tài) 庫的名稱,所述4]1(11'〇1(1.1]11^文件用于將源文件生成動態(tài)鏈接庫1;[1311^|3131]16.80。9. 根據(jù)權(quán)利要求8所述的設(shè)備,其特征在于, 所述接口單元進(jìn)一步用于在jni同級目錄下生成libs目錄和obj目錄,并生成用于存放 所述動態(tài)鏈接庫1讓11^)31&1116.80的1讓8/&1'1116&13;[/1;[1311^)31&1116.80文件 。10. 根據(jù)權(quán)利要求8所述的設(shè)備,其特征在于, 進(jìn)一步地,所述編碼mp3的JNI接口函數(shù)包括編碼mp3的初始化函數(shù)mp3_init、所述mp3 編碼函數(shù)mp3_encoder和編碼mp3的反初始化函數(shù)mp3_uninit〇11. 根據(jù)權(quán)利要求10所述的設(shè)備,其特征在于, 進(jìn)一步地, 所述初始化函數(shù)mp3_init的參數(shù)包括所生成的mp3文件的目錄及名字,聲道數(shù)、采樣 率、碼率; 所述mp3編碼函數(shù)mp3_encoder的參數(shù)包括原始音頻數(shù)據(jù)buffer ,buffer中音頻數(shù)據(jù)的 長度len。12. 根據(jù)權(quán)利要求10所述的設(shè)備,其特征在于, 進(jìn)一步地,所述編碼單元使用所述JNI接口函數(shù)編碼mp3文件包括如下步驟: 在所述Android平臺的java層加載所述動態(tài)鏈接庫I ibmp31ame · so; 調(diào)用所述初始化函數(shù)mp3_init指定生成mp3文件的路徑,并指定編碼參數(shù); 啟動錄制接口,將采集的音頻數(shù)據(jù)傳給所述mp3編碼函數(shù)mp3_encoder進(jìn)行編碼; 調(diào)用所述反初始化函數(shù)mp3_uninit釋放資源,生成mp3文件。
【文檔編號】G06F9/45GK105912377SQ201510921380
【公開日】2016年8月31日
【申請日】2015年12月13日
【發(fā)明人】李先彪
【申請人】樂視網(wǎng)信息技術(shù)(北京)股份有限公司