在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法及系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法及系統(tǒng),涉及Java應(yīng)用領(lǐng)域,該方法包括以下步驟:利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口;根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包擴(kuò)展實(shí)現(xiàn)音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制;將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。本發(fā)明中的Java虛擬機(jī)由主從播放器實(shí)現(xiàn)混音播放,能確?;煲舨シ诺姆€(wěn)定性。
【專(zhuān)利說(shuō)明】在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Java應(yīng)用領(lǐng)域,具體是涉及一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法及系統(tǒng)。
【背景技術(shù)】
[0002]IPTV(Internet Protocol Televis1n, IP 電視/交互式網(wǎng)絡(luò)電視)是一種利用寬帶有線電視網(wǎng)、集互聯(lián)網(wǎng)、多媒體、通訊等多種技術(shù)于一體,向家庭用戶提供包括數(shù)字電視在內(nèi)的多種交互式服務(wù)的嶄新技術(shù)。IPTV業(yè)務(wù)大致分為基本業(yè)務(wù)和增值業(yè)務(wù)兩大類(lèi),IPTV的基本業(yè)務(wù)是指以視聽(tīng)內(nèi)容為主的視頻內(nèi)容服務(wù),包括直播、點(diǎn)播、輪播、時(shí)移等;而IPTV的增值業(yè)務(wù)包括游戲、即時(shí)通信、電子支付以及卡拉OK等,其中,游戲分為網(wǎng)頁(yè)游戲和Java游戲兩種,是IPTV增值業(yè)務(wù)的重要組成部分。
[0003]Java ME以往稱作J2ME,是為機(jī)頂盒、移動(dòng)電話和PDA (PersonalDigitalAssistant,個(gè)人數(shù)字助理)之類(lèi)嵌入式消費(fèi)電子設(shè)備提供的Java語(yǔ)言平臺(tái),包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的 Java API (Applicat1n Programming Interface,應(yīng)用編程接口)。它和Java SE、Java EE —起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過(guò)JCP (Java CommunityProcess,描述被提議加入到Java體系中的的規(guī)范和技術(shù))制訂的。
[0004]在嵌入式設(shè)備環(huán)境中,設(shè)備上常安裝一個(gè)與硬件無(wú)關(guān)的處理機(jī)制如Java虛擬機(jī),以便允許下載程序并在設(shè)備上運(yùn)行。設(shè)備允許一個(gè)Java虛擬機(jī)使用與硬件無(wú)關(guān)的語(yǔ)言,例如Java語(yǔ)言。Java語(yǔ)言是Sun公司推出的跨平臺(tái)面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語(yǔ)言,目前正在各個(gè)領(lǐng)域獲得越來(lái)越廣泛的應(yīng)用,已經(jīng)成為最重要的程序設(shè)計(jì)語(yǔ)言之一。Java虛擬機(jī)是一臺(tái)抽象的計(jì)算機(jī),其主要任務(wù)是裝載Java class文件并執(zhí)行其中的字節(jié)碼,Java class文件是運(yùn)行在任何支持Java虛擬機(jī)的硬件平臺(tái)和操作系統(tǒng)上的二進(jìn)制文件,負(fù)責(zé)運(yùn)行Java程序。
[0005]現(xiàn)有的基于IPTV系統(tǒng)的Java游戲業(yè)務(wù)是將Java游戲(即J2ME程序)移植到IPTV系統(tǒng)上運(yùn)行。因此,安裝在機(jī)頂盒端的、運(yùn)行Java游戲的Java虛擬機(jī)大多直接或間接使用Java虛擬機(jī)?;贗PTV的Java游戲主要是進(jìn)行遙控指令處理、圖像顯示、音頻播放等處理,其中音頻播放部分隨著各自機(jī)頂盒廠商芯片選擇不同而實(shí)現(xiàn)均存在差異。Java虛擬機(jī)客戶端要實(shí)現(xiàn)音頻播放功能除了要基于J2ME規(guī)范擴(kuò)展相關(guān)音頻接口,還要結(jié)合芯片廠商的硬件音頻播放方法來(lái)完成。
[0006]目前的Java虛擬機(jī)播放接口及邏輯與硬件設(shè)備的播控處理方式無(wú)法銜接,Java虛擬機(jī)的音頻播放一般由單個(gè)播放器實(shí)現(xiàn)音頻播放,不支持混音播放。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法及系統(tǒng),Java虛擬機(jī)由主從播放器實(shí)現(xiàn)混音播放,能有效確?;煲舨シ诺姆€(wěn)定性。
[0008]本發(fā)明提供一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,包括以下步驟:
[0009]S1、利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口 ;
[0010]S2、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動(dòng)音頻播放media_start接口、停止播放media_stop接口、音頻銷(xiāo)毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包SDK擴(kuò)展實(shí)現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制;
[0011]S3、將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
[0012]在上述技術(shù)方案的基礎(chǔ)上,步驟S2中所述實(shí)現(xiàn)硬件設(shè)備的音頻播放接口的流程如下:
[0013]S201、創(chuàng)建并實(shí)現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將mediajreate參數(shù)設(shè)置到指針?lè)祷刂抵?,以便調(diào)用其它播控方法時(shí)傳入使用;設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài);
[0014]S202、創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示;
[0015]S203、創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,創(chuàng)建獨(dú)立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制;
[0016]S204、創(chuàng)建并實(shí)現(xiàn)音頻銷(xiāo)毀的media_destroy接口,通過(guò)調(diào)用基于硬件設(shè)備的SDK提供的音頻銷(xiāo)毀方法,實(shí)現(xiàn)對(duì)創(chuàng)建的播放器所用資源的釋放和銷(xiāo)毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除;
[0017]S205、創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
[0018]在上述技術(shù)方案的基礎(chǔ)上,步驟S201中所述media_create參數(shù)包括playerld、mimeType、mimeLength,其中,playerld表示媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度;音頻流標(biāo)示通過(guò)媒體播放標(biāo)7]\ playerld和音頻類(lèi)型mimeType進(jìn)行描述標(biāo)不。
[0019]在上述技術(shù)方案的基礎(chǔ)上,步驟S202中所述Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);waVe格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0020]在上述技術(shù)方案的基礎(chǔ)上,步驟S203中將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放時(shí),實(shí)時(shí)判斷該播放器的全局狀態(tài)標(biāo)志,如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對(duì)應(yīng)音頻流;如果主播放器或從播放器處于播放停止?fàn)顟B(tài),則設(shè)置該播放器立即停止對(duì)應(yīng)音頻流的播放;主、從播放器在開(kāi)始播放音頻時(shí),設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放狀態(tài);播放音頻結(jié)束時(shí),則設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放停止?fàn)顟B(tài),即空閑狀態(tài)。
[0021]在上述技術(shù)方案的基礎(chǔ)上,步驟S203中所述對(duì)應(yīng)主或從播放器是通過(guò)主、從播放器狀態(tài)來(lái)判定,如果第一個(gè)音頻交由主播放器進(jìn)行播放,則主播放器處于占用狀態(tài),第二個(gè)音頻就交由從播放器進(jìn)行播放;如果主從播放器同時(shí)在播放,則表明主從播放器都處于占用狀態(tài),第三個(gè)等待播放的音頻就等其中一個(gè)播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
[0022]本發(fā)明還提供一種用于實(shí)現(xiàn)上述方法的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),包括音頻相關(guān)的KNI擴(kuò)展接口獲取單元、音頻播放接口實(shí)現(xiàn)單元、Java虛擬機(jī)客戶端生成單元,其中:
[0023]所述音頻相關(guān)的KNI擴(kuò)展接口獲取單元用于:利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口 ;
[0024]所述音頻播放接口實(shí)現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動(dòng)音頻播放media_start接口、停止播放media_stop接口、音頻銷(xiāo)毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包SDK擴(kuò)展實(shí)現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制;
[0025]所述Java虛擬機(jī)客戶端生成單元用于:將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
[0026]在上述技術(shù)方案的基礎(chǔ)上,所述音頻播放接口實(shí)現(xiàn)單元包括media_create接口實(shí)現(xiàn)子單元、media_do_buffering接口實(shí)現(xiàn)子單元、media_start接口實(shí)現(xiàn)子單元、其它音頻播放接口實(shí)現(xiàn)子單元,其中:
[0027]所述media_create接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將media_create參數(shù)設(shè)置到指針?lè)祷刂抵?,以便調(diào)用其它播控方法時(shí)傳入使用;設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài);
[0028]所述media_do_bufTering接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示;
[0029]所述media_start接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,創(chuàng)建獨(dú)立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制;
[0030]所述其它音頻播放接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
[0031]在上述技術(shù)方案的基礎(chǔ)上,所述media_create參數(shù)包括playerld、mimeType、mimeLength,其中,playerld表示媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度;音頻流標(biāo)示通過(guò)媒體播放標(biāo)示playerld和音頻類(lèi)型mimeType進(jìn)行描述標(biāo)不。
[0032]在上述技術(shù)方案的基礎(chǔ)上,所述Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)如下:
[0034]本發(fā)明中的Java虛擬機(jī)由主從播放器實(shí)現(xiàn)混音播放,能有效確?;煲舨シ诺姆€(wěn)定性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0035]圖1是本發(fā)明實(shí)施例中在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法的流程圖。
[0036]圖2是本發(fā)明實(shí)施例中實(shí)現(xiàn)硬件設(shè)備的音頻播放接口的流程圖。
【具體實(shí)施方式】
[0037]下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0038]參見(jiàn)圖1所示,本發(fā)明實(shí)施例提供一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,包括以下步驟:
[0039]S1、利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口。Java虛擬機(jī)中的KNI擴(kuò)展接口包括音頻播控接口、視頻播控接口和音量接口等,與音頻相關(guān)的KNI擴(kuò)展接口包括音頻播控接口和音量接口。
[0040]由于Java虛擬機(jī)是一個(gè)集成多環(huán)境的多系統(tǒng)的綜合系統(tǒng),這里僅以linux操作系統(tǒng)下的Qt(—種跨平臺(tái)C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架)環(huán)境為實(shí)例進(jìn)行說(shuō)明。其中多環(huán)境包括Qte (Qte即Qt/embedded,它是Qt的一個(gè)版本)、fb (即DirectFB, 一個(gè)輕量級(jí)的提供硬件圖形加速,輸入設(shè)備處理和抽象的圖形庫(kù))、wince (Windows EmbeddedCompact (即Windows CE)是微軟公司嵌入式、移動(dòng)計(jì)算平臺(tái)的基礎(chǔ),它是一個(gè)開(kāi)放的、可升級(jí)的32位嵌入式操作系統(tǒng))、Win32 (Microsoft Windows操作系統(tǒng)的32位環(huán)境)等,而多系統(tǒng)包括windows、Iinux等,Sun公司提供的Java虛擬機(jī)源碼支持在這些環(huán)境及系統(tǒng)中編譯生成對(duì)應(yīng)的Java虛擬機(jī)客戶端。
[0041]S2、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接□。
[0042]本發(fā)明實(shí)施例利用JSR135的KNI擴(kuò)展接口(即本地接口,是Sun公司的Java虛擬機(jī)所使用的本地方法調(diào)用機(jī)制)實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,其KNI擴(kuò)展接口來(lái)自JSR135原生代碼中的KNI Direct Player, c和KNI Direct Volume, c兩個(gè)類(lèi)文件,音頻播放接口主要包括:media_create (音頻創(chuàng)建)、media_close(音頻關(guān)閉)、media_release_device (音頻釋放)、media_do_buffering (設(shè)置音頻數(shù)據(jù))、media_start (啟動(dòng)音頻播放)、media_stop (停止播放)、media_destroy (音頻銷(xiāo)毀)等。硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的SDK (Software Development Kit,軟件開(kāi)發(fā)工具包)擴(kuò)展實(shí)現(xiàn)上述的音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制。
[0043]參見(jiàn)圖2所示,步驟S2中實(shí)現(xiàn)硬件設(shè)備的音頻播放接口的流程如下:
[0044]S201、創(chuàng)建并實(shí)現(xiàn)用于播放音頻的media_create (音頻創(chuàng)建)接口,media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將media^reate參數(shù)設(shè)置到指針?lè)祷刂抵?,以便調(diào)用其它播控方法時(shí)傳入使用。media_create 參數(shù)包括 playerld、mimeType、mimeLength,其中,playerld 表不媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度。音頻流標(biāo)示通過(guò)媒體播放標(biāo)示playerld和音頻類(lèi)型進(jìn)行描述標(biāo)示,例如(1001.wav)。音頻類(lèi)型包括 wav、mid1、mp3、amr、MPEG4、TONE 等。
[0045]設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài)(空閑)。
[0046]S202、創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering(設(shè)置音頻數(shù)據(jù))接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create (音頻創(chuàng)建)接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示。
[0047]Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0048]S203、創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start (啟動(dòng)音頻播放)接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,創(chuàng)建獨(dú)立線程,循環(huán)讀取media_do_buffering(設(shè)置音頻數(shù)據(jù))接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制。
[0049]將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放時(shí),需要實(shí)時(shí)判斷該播放器的全局狀態(tài)標(biāo)志。如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對(duì)應(yīng)音頻流;如果主播放器或從播放器處于播放停止?fàn)顟B(tài),則設(shè)置該播放器立即停止對(duì)應(yīng)音頻流的播放。主、從播放器在開(kāi)始播放音頻時(shí),設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放狀態(tài);播放音頻結(jié)束時(shí),則設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放停止?fàn)顟B(tài),即空閑狀態(tài)。
[0050]上述對(duì)應(yīng)主或從播放器是通過(guò)主、從播放器狀態(tài)來(lái)判定,如果第一個(gè)音頻交由主播放器進(jìn)行播放,則主播放器處于占用狀態(tài),第二個(gè)音頻就交由從播放器進(jìn)行播放;如果主從播放器同時(shí)在播放,則表明主從播放器都處于占用狀態(tài),第三個(gè)等待播放的音頻就等其中一個(gè)播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
[0051]S204、創(chuàng)建并實(shí)現(xiàn)音頻銷(xiāo)毀的media_destroy (音頻銷(xiāo)毀)接口,通過(guò)調(diào)用基于硬件設(shè)備的SDK提供的音頻銷(xiāo)毀方法,實(shí)現(xiàn)對(duì)創(chuàng)建的播放器所用資源的釋放和銷(xiāo)毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除。
[0052]S205、創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn)。由于KNI擴(kuò)展接口為Java虛擬機(jī)統(tǒng)一定義,且為公知,這里不一一說(shuō)明。例如:在創(chuàng)建media_pause (播放暫停)接口時(shí),需將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建media_St0p (停止播放)接口時(shí),需將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
[0053]S3、將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
[0054]本發(fā)明實(shí)施例還提供一種用于實(shí)現(xiàn)上述方法的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),包括音頻相關(guān)的KNI擴(kuò)展接口獲取單元、音頻播放接口實(shí)現(xiàn)單元、Java虛擬機(jī)客戶端生成單元,其中:
[0055]音頻相關(guān)的KNI擴(kuò)展接口獲取單元用于:利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口 ;
[0056]音頻播放接口實(shí)現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉 media_close 接口、音頻釋放 media_release_device 接口、設(shè)置音頻數(shù)據(jù) media_do_buffering接口、啟動(dòng)音頻播放media_start接口、停止播放media_stop接口、音頻銷(xiāo)毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包SDK擴(kuò)展實(shí)現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制;
[0057]Java虛擬機(jī)客戶端生成單元用于:將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
[0058]音頻播放接口實(shí)現(xiàn)單元包括media_create接口實(shí)現(xiàn)子單元、media_do_buffering接口實(shí)現(xiàn)子單元、media_start接口實(shí)現(xiàn)子單元、其它音頻播放接口實(shí)現(xiàn)子單元,其中:
[0059]media_create接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將media_create參數(shù)設(shè)置到指針?lè)祷刂抵校员阏{(diào)用其它播控方法時(shí)傳入使用;設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài);media_create參數(shù)包括playerId、mimeType、mimeLength,其中,playerld表示媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度;音頻流標(biāo)示通過(guò)媒體播放標(biāo)示playerld和音頻類(lèi)型mimeType進(jìn)行描述標(biāo)示。
[0060]media_do_buffering接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0061]media_start接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,創(chuàng)建獨(dú)立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制。
[0062]其它音頻播放接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
[0063]本發(fā)明實(shí)施例的原理詳細(xì)闡述如下:
[0064]本發(fā)明實(shí)施例采用的Java虛擬機(jī)為Sun公司提供的開(kāi)源Java虛擬機(jī),其音頻播放是通過(guò)Java虛擬機(jī)的擴(kuò)展部件JSR135 (Java Specificat1n Requests 135, Java規(guī)范要求135)實(shí)現(xiàn),JSR135是Sun公司開(kāi)源Java虛擬機(jī)的模塊部件,是Java標(biāo)準(zhǔn)化組織提交給Sun公司的Java開(kāi)發(fā)草案。JSR135實(shí)現(xiàn)了基于J2ME標(biāo)準(zhǔn)的音頻處理部分,與設(shè)備相關(guān)的KNI播放接口則需要終端設(shè)備自行進(jìn)行擴(kuò)展實(shí)現(xiàn)。
[0065]Java虛擬機(jī)的音頻處理已經(jīng)在基于J2ME規(guī)范的基礎(chǔ)上實(shí)現(xiàn)了,而針對(duì)音頻流通過(guò)設(shè)備進(jìn)行最終播放的方法都是需要基于JSR135的KNI接口擴(kuò)展實(shí)現(xiàn),且其播放操作僅僅停留在對(duì)音頻流的直接播控操作。本發(fā)明通過(guò)擴(kuò)展JSR135的KNI接口,實(shí)現(xiàn)創(chuàng)建主播放器和從播放器,讓Java游戲?qū)崿F(xiàn)兩路音頻能同時(shí)播放成為可能,而且避免了現(xiàn)有技術(shù)中一個(gè)播放器對(duì)上層Java虛擬機(jī)傳入的多路音頻流來(lái)回切換播放,而可能造成的音頻不連貫或音頻與畫(huà)面不匹配等問(wèn)題。
[0066]在實(shí)現(xiàn)音頻創(chuàng)建接口時(shí)創(chuàng)建主播放器和從播放器,將當(dāng)前播放參數(shù)的媒體播放標(biāo)示存儲(chǔ)到一個(gè)指針中。在實(shí)現(xiàn)設(shè)置音頻數(shù)據(jù)接口時(shí),將接收到上層Java虛擬機(jī)調(diào)用該接口而傳入的音頻流存儲(chǔ)到內(nèi)存中或設(shè)備內(nèi)可讀寫(xiě)區(qū)域的文件中。通過(guò)Java虛擬機(jī)傳入的指針獲取媒體播放標(biāo)示,并結(jié)合音頻流所屬的音頻類(lèi)型生成標(biāo)識(shí)該音頻的音頻文件名(如1001.wav)。在實(shí)現(xiàn)啟動(dòng)音頻播放接口時(shí),根據(jù)Java虛擬機(jī)傳入的指針獲取媒體播放標(biāo)示,并創(chuàng)建音頻播放線程。該線程根據(jù)主從播放器的播控空閑狀態(tài),并根據(jù)媒體播放標(biāo)示獲取存儲(chǔ)在內(nèi)存中的音頻流或設(shè)備內(nèi)可讀寫(xiě)區(qū)域的對(duì)應(yīng)音頻文件,通過(guò)線程不停的讀取并向硬件指定的音頻緩存區(qū)中寫(xiě)入以實(shí)現(xiàn)音頻播放。播放過(guò)程中重置當(dāng)前所屬主播放器或從播放器的使用狀態(tài)。
[0067]判斷主從播放器的播控空閑狀態(tài)是用于將當(dāng)前音頻切換到主、從播放器中空閑狀態(tài)的播放器進(jìn)行播放。音頻播放過(guò)程中,當(dāng)調(diào)用media_pause(播放暫停)時(shí),則該播放線程暫停,并向硬件指定的音頻緩存區(qū)中寫(xiě)音頻流以達(dá)到暫停播放的功能;當(dāng)調(diào)用media_stop (停止播放)時(shí),則該播放線程停止向硬件指定的音頻緩存區(qū)中寫(xiě)音頻流,并結(jié)束退出該線程。
[0068]本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明實(shí)施例進(jìn)行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護(hù)范圍之內(nèi)。
[0069]說(shuō)明書(shū)中未詳細(xì)描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。
【權(quán)利要求】
1.一種在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于,包括以下步驟: 51、利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口; 52、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動(dòng)音頻播放media_start接口、停止播放media_stop接口、音頻銷(xiāo)毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包SDK擴(kuò)展實(shí)現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制; 53、將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
2.如權(quán)利要求1所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于:步驟S2中所述實(shí)現(xiàn)硬件設(shè)備的音頻播放接口的流程如下: 5201、創(chuàng)建并實(shí)現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將media^reate參數(shù)設(shè)置到指針?lè)祷刂抵?,以便調(diào)用其它播控方法時(shí)傳入使用;設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài); 5202、創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示; 5203、創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,倉(cāng)Il建獨(dú)立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制; 5204、創(chuàng)建并實(shí)現(xiàn)音頻銷(xiāo)毀的media_destroy接口,通過(guò)調(diào)用基于硬件設(shè)備的SDK提供的音頻銷(xiāo)毀方法,實(shí)現(xiàn)對(duì)創(chuàng)建的播放器所用資源的釋放和銷(xiāo)毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除; 5205、創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn):在創(chuàng)建播放暫停media_pause接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
3.如權(quán)利要求2所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于:步驟S201中所述 media_create 參數(shù)包括 playerld、mimeType、mimeLength,其中,playerld 表不媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度;音頻流標(biāo)示通過(guò)媒體播放標(biāo)示playerld和音頻類(lèi)型mimeType進(jìn)行描述標(biāo)不O
4.如權(quán)利要求2所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于:步驟S202中所述Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
5.如權(quán)利要求2所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于:步驟S203中將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放時(shí),實(shí)時(shí)判斷該播放器的全局狀態(tài)標(biāo)志,如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對(duì)應(yīng)音頻流;如果主播放器或從播放器處于播放停止?fàn)顟B(tài),則設(shè)置該播放器立即停止對(duì)應(yīng)音頻流的播放;主、從播放器在開(kāi)始播放音頻時(shí),設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放狀態(tài);播放音頻結(jié)束時(shí),則設(shè)置對(duì)應(yīng)播放器的全局狀態(tài)標(biāo)志為播放停止?fàn)顟B(tài),即空閑狀態(tài)。
6.如權(quán)利要求2至5中任一項(xiàng)所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的方法,其特征在于:步驟S203中所述對(duì)應(yīng)主或從播放器是通過(guò)主、從播放器狀態(tài)來(lái)判定,如果第一個(gè)音頻交由主播放器進(jìn)行播放,則主播放器處于占用狀態(tài),第二個(gè)音頻就交由從播放器進(jìn)行播放;如果主從播放器同時(shí)在播放,則表明主從播放器都處于占用狀態(tài),第三個(gè)等待播放的音頻就等其中一個(gè)播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
7.用于實(shí)現(xiàn)權(quán)利要求1至6中任一項(xiàng)所述方法的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),其特征在于:包括音頻相關(guān)的KNI擴(kuò)展接口獲取單元、音頻播放接口實(shí)現(xiàn)單元、Java虛擬機(jī)客戶端生成單元,其中: 所述音頻相關(guān)的KNI擴(kuò)展接口獲取單元用于:利用Java虛擬機(jī)的擴(kuò)展部件JSR135獲取與音頻相關(guān)的KNI擴(kuò)展接口 ; 所述音頻播放接口實(shí)現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴(kuò)展接口,實(shí)現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動(dòng)音頻播放media_start接口、停止播放media_stop接口、音頻銷(xiāo)毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個(gè)播放器并同時(shí)播放,通過(guò)基于硬件設(shè)備的軟件開(kāi)發(fā)工具包SDK擴(kuò)展實(shí)現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實(shí)現(xiàn)主、從播放器的混音播放控制; 所述Java虛擬機(jī)客戶端生成單元用于:將JSR135部件編入Java虛擬機(jī)中,生成支持音頻播放和混音播放的Java虛擬機(jī)客戶端。
8.如權(quán)利要求7所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),其特征在于:所述音頻播放接口實(shí)現(xiàn)單元包括media_create接口實(shí)現(xiàn)子單元、media_do_buffering接口實(shí)現(xiàn)子單元、media_start接口實(shí)現(xiàn)子單元、其它音頻播放接口實(shí)現(xiàn)子單元,其中: 所述media_create接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標(biāo)示,將media_create參數(shù)設(shè)置到指針?lè)祷刂抵?,以便調(diào)用其它播控方法時(shí)傳入使用;設(shè)置主、從播放器的全局狀態(tài)標(biāo)志:播放狀態(tài)、暫停播放狀態(tài)和播放停止?fàn)顟B(tài); 所述media_do_bufTering接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機(jī)傳入的指針中取出調(diào)用media_create接口時(shí)創(chuàng)建的音頻文件名,作為該音頻流的標(biāo)示; 所述media_start接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)用于啟動(dòng)音頻播放的media_start接口,根據(jù)Java虛擬機(jī)傳入的指針中存儲(chǔ)的待播放音頻的音頻流標(biāo)示,創(chuàng)建獨(dú)立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲(chǔ)在內(nèi)存中該音頻流標(biāo)示對(duì)應(yīng)的音頻流中,將讀取的音頻流交由對(duì)應(yīng)主或從播放器進(jìn)行音頻播放,實(shí)現(xiàn)主、從播放器的混音播放控制; 所述其它音頻播放接口實(shí)現(xiàn)子單元用于:創(chuàng)建并實(shí)現(xiàn)其它音頻播放接口,通過(guò)結(jié)合硬件設(shè)備的對(duì)應(yīng)SDK播控接口或方法實(shí)現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時(shí),將對(duì)應(yīng)的播放器全局狀態(tài)標(biāo)志設(shè)置為停止?fàn)顟B(tài);實(shí)現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過(guò)調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進(jìn)行設(shè)置即可。
9.如權(quán)利要求8所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),其特征在于:所述media_create 參數(shù)包括 playerId、mimeType、mimeLength,其中,playerld 表不媒體播放標(biāo)示,每個(gè)音頻在游戲中的唯一標(biāo)示;mimeType表示音頻類(lèi)型;mimeLength表示mimeType的長(zhǎng)度;音頻流標(biāo)示通過(guò)媒體播放標(biāo)示playerld和音頻類(lèi)型mimeType進(jìn)行描述標(biāo)示。
10.如權(quán)利要求8所述的在Java虛擬機(jī)中實(shí)現(xiàn)混音播放的系統(tǒng),其特征在于:所述Java虛擬機(jī)傳入的指針包括播放標(biāo)示ID、音頻流總長(zhǎng)度、音頻類(lèi)型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標(biāo)示ID用長(zhǎng)整形表示,音頻流總長(zhǎng)度用整形表示,音頻類(lèi)型用整形表示,用于標(biāo)示當(dāng)前音頻流的類(lèi)型;音頻流文件名用字符型表示,存儲(chǔ)在內(nèi)存中或設(shè)備的可讀寫(xiě)區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
【文檔編號(hào)】G11C7/16GK104269185SQ201410454859
【公開(kāi)日】2015年1月7日 申請(qǐng)日期:2014年9月9日 優(yōu)先權(quán)日:2014年9月9日
【發(fā)明者】劉焱青, 李明春, 王子鍵, 石磊 申請(qǐng)人:烽火通信科技股份有限公司