两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

在Java虛擬機中實現(xiàn)混音播放的方法及系統(tǒng)的制作方法

文檔序號:6767072閱讀:355來源:國知局
在Java虛擬機中實現(xiàn)混音播放的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種在Java虛擬機中實現(xiàn)混音播放的方法及系統(tǒng),涉及Java應(yīng)用領(lǐng)域,該方法包括以下步驟:利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口;根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包擴展實現(xiàn)音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制;將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。本發(fā)明中的Java虛擬機由主從播放器實現(xiàn)混音播放,能確保混音播放的穩(wěn)定性。
【專利說明】在Java虛擬機中實現(xiàn)混音播放的方法及系統(tǒng)

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Java應(yīng)用領(lǐng)域,具體是涉及一種在Java虛擬機中實現(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ù)兩大類,IPTV的基本業(yè)務(wù)是指以視聽內(nèi)容為主的視頻內(nèi)容服務(wù),包括直播、點播、輪播、時移等;而IPTV的增值業(yè)務(wù)包括游戲、即時通信、電子支付以及卡拉OK等,其中,游戲分為網(wǎng)頁游戲和Java游戲兩種,是IPTV增值業(yè)務(wù)的重要組成部分。
[0003]Java ME以往稱作J2ME,是為機頂盒、移動電話和PDA (PersonalDigitalAssistant,個人數(shù)字助理)之類嵌入式消費電子設(shè)備提供的Java語言平臺,包括虛擬機和一系列標準化的 Java API (Applicat1n Programming Interface,應(yīng)用編程接口)。它和Java SE、Java EE —起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過JCP (Java CommunityProcess,描述被提議加入到Java體系中的的規(guī)范和技術(shù))制訂的。
[0004]在嵌入式設(shè)備環(huán)境中,設(shè)備上常安裝一個與硬件無關(guān)的處理機制如Java虛擬機,以便允許下載程序并在設(shè)備上運行。設(shè)備允許一個Java虛擬機使用與硬件無關(guān)的語言,例如Java語言。Java語言是Sun公司推出的跨平臺面向?qū)ο蟮母呒壋绦蛟O(shè)計語言,目前正在各個領(lǐng)域獲得越來越廣泛的應(yīng)用,已經(jīng)成為最重要的程序設(shè)計語言之一。Java虛擬機是一臺抽象的計算機,其主要任務(wù)是裝載Java class文件并執(zhí)行其中的字節(jié)碼,Java class文件是運行在任何支持Java虛擬機的硬件平臺和操作系統(tǒng)上的二進制文件,負責運行Java程序。
[0005]現(xiàn)有的基于IPTV系統(tǒng)的Java游戲業(yè)務(wù)是將Java游戲(即J2ME程序)移植到IPTV系統(tǒng)上運行。因此,安裝在機頂盒端的、運行Java游戲的Java虛擬機大多直接或間接使用Java虛擬機?;贗PTV的Java游戲主要是進行遙控指令處理、圖像顯示、音頻播放等處理,其中音頻播放部分隨著各自機頂盒廠商芯片選擇不同而實現(xiàn)均存在差異。Java虛擬機客戶端要實現(xiàn)音頻播放功能除了要基于J2ME規(guī)范擴展相關(guān)音頻接口,還要結(jié)合芯片廠商的硬件音頻播放方法來完成。
[0006]目前的Java虛擬機播放接口及邏輯與硬件設(shè)備的播控處理方式無法銜接,Java虛擬機的音頻播放一般由單個播放器實現(xiàn)音頻播放,不支持混音播放。


【發(fā)明內(nèi)容】

[0007]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種在Java虛擬機中實現(xiàn)混音播放的方法及系統(tǒng),Java虛擬機由主從播放器實現(xiàn)混音播放,能有效確?;煲舨シ诺姆€(wěn)定性。
[0008]本發(fā)明提供一種在Java虛擬機中實現(xiàn)混音播放的方法,包括以下步驟:
[0009]S1、利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口 ;
[0010]S2、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動音頻播放media_start接口、停止播放media_stop接口、音頻銷毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包SDK擴展實現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制;
[0011]S3、將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
[0012]在上述技術(shù)方案的基礎(chǔ)上,步驟S2中所述實現(xiàn)硬件設(shè)備的音頻播放接口的流程如下:
[0013]S201、創(chuàng)建并實現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將mediajreate參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用;設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài);
[0014]S202、創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機傳入的指針中取出調(diào)用media_create接口時創(chuàng)建的音頻文件名,作為該音頻流的標示;
[0015]S203、創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,創(chuàng)建獨立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制;
[0016]S204、創(chuàng)建并實現(xiàn)音頻銷毀的media_destroy接口,通過調(diào)用基于硬件設(shè)備的SDK提供的音頻銷毀方法,實現(xiàn)對創(chuàng)建的播放器所用資源的釋放和銷毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除;
[0017]S205、創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
[0018]在上述技術(shù)方案的基礎(chǔ)上,步驟S201中所述media_create參數(shù)包括playerld、mimeType、mimeLength,其中,playerld表示媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度;音頻流標示通過媒體播放標7]\ playerld和音頻類型mimeType進行描述標不。
[0019]在上述技術(shù)方案的基礎(chǔ)上,步驟S202中所述Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);waVe格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0020]在上述技術(shù)方案的基礎(chǔ)上,步驟S203中將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放時,實時判斷該播放器的全局狀態(tài)標志,如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對應(yīng)音頻流;如果主播放器或從播放器處于播放停止狀態(tài),則設(shè)置該播放器立即停止對應(yīng)音頻流的播放;主、從播放器在開始播放音頻時,設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放狀態(tài);播放音頻結(jié)束時,則設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放停止狀態(tài),即空閑狀態(tài)。
[0021]在上述技術(shù)方案的基礎(chǔ)上,步驟S203中所述對應(yīng)主或從播放器是通過主、從播放器狀態(tài)來判定,如果第一個音頻交由主播放器進行播放,則主播放器處于占用狀態(tài),第二個音頻就交由從播放器進行播放;如果主從播放器同時在播放,則表明主從播放器都處于占用狀態(tài),第三個等待播放的音頻就等其中一個播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
[0022]本發(fā)明還提供一種用于實現(xiàn)上述方法的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),包括音頻相關(guān)的KNI擴展接口獲取單元、音頻播放接口實現(xiàn)單元、Java虛擬機客戶端生成單元,其中:
[0023]所述音頻相關(guān)的KNI擴展接口獲取單元用于:利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口 ;
[0024]所述音頻播放接口實現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動音頻播放media_start接口、停止播放media_stop接口、音頻銷毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包SDK擴展實現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制;
[0025]所述Java虛擬機客戶端生成單元用于:將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
[0026]在上述技術(shù)方案的基礎(chǔ)上,所述音頻播放接口實現(xiàn)單元包括media_create接口實現(xiàn)子單元、media_do_buffering接口實現(xiàn)子單元、media_start接口實現(xiàn)子單元、其它音頻播放接口實現(xiàn)子單元,其中:
[0027]所述media_create接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將media_create參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用;設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài);
[0028]所述media_do_bufTering接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機傳入的指針中取出調(diào)用media_create接口時創(chuàng)建的音頻文件名,作為該音頻流的標示;
[0029]所述media_start接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,創(chuàng)建獨立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制;
[0030]所述其它音頻播放接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
[0031]在上述技術(shù)方案的基礎(chǔ)上,所述media_create參數(shù)包括playerld、mimeType、mimeLength,其中,playerld表示媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度;音頻流標示通過媒體播放標示playerld和音頻類型mimeType進行描述標不。
[0032]在上述技術(shù)方案的基礎(chǔ)上,所述Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點如下:
[0034]本發(fā)明中的Java虛擬機由主從播放器實現(xiàn)混音播放,能有效確?;煲舨シ诺姆€(wěn)定性。

【專利附圖】

【附圖說明】
[0035]圖1是本發(fā)明實施例中在Java虛擬機中實現(xiàn)混音播放的方法的流程圖。
[0036]圖2是本發(fā)明實施例中實現(xiàn)硬件設(shè)備的音頻播放接口的流程圖。

【具體實施方式】
[0037]下面結(jié)合附圖及具體實施例對本發(fā)明作進一步的詳細描述。
[0038]參見圖1所示,本發(fā)明實施例提供一種在Java虛擬機中實現(xiàn)混音播放的方法,包括以下步驟:
[0039]S1、利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口。Java虛擬機中的KNI擴展接口包括音頻播控接口、視頻播控接口和音量接口等,與音頻相關(guān)的KNI擴展接口包括音頻播控接口和音量接口。
[0040]由于Java虛擬機是一個集成多環(huán)境的多系統(tǒng)的綜合系統(tǒng),這里僅以linux操作系統(tǒng)下的Qt(—種跨平臺C++圖形用戶界面應(yīng)用程序開發(fā)框架)環(huán)境為實例進行說明。其中多環(huán)境包括Qte (Qte即Qt/embedded,它是Qt的一個版本)、fb (即DirectFB, 一個輕量級的提供硬件圖形加速,輸入設(shè)備處理和抽象的圖形庫)、wince (Windows EmbeddedCompact (即Windows CE)是微軟公司嵌入式、移動計算平臺的基礎(chǔ),它是一個開放的、可升級的32位嵌入式操作系統(tǒng))、Win32 (Microsoft Windows操作系統(tǒng)的32位環(huán)境)等,而多系統(tǒng)包括windows、Iinux等,Sun公司提供的Java虛擬機源碼支持在這些環(huán)境及系統(tǒng)中編譯生成對應(yīng)的Java虛擬機客戶端。
[0041]S2、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接□。
[0042]本發(fā)明實施例利用JSR135的KNI擴展接口(即本地接口,是Sun公司的Java虛擬機所使用的本地方法調(diào)用機制)實現(xiàn)硬件設(shè)備的音頻播放接口,其KNI擴展接口來自JSR135原生代碼中的KNI Direct Player, c和KNI Direct Volume, c兩個類文件,音頻播放接口主要包括:media_create (音頻創(chuàng)建)、media_close(音頻關(guān)閉)、media_release_device (音頻釋放)、media_do_buffering (設(shè)置音頻數(shù)據(jù))、media_start (啟動音頻播放)、media_stop (停止播放)、media_destroy (音頻銷毀)等。硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的SDK (Software Development Kit,軟件開發(fā)工具包)擴展實現(xiàn)上述的音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制。
[0043]參見圖2所示,步驟S2中實現(xiàn)硬件設(shè)備的音頻播放接口的流程如下:
[0044]S201、創(chuàng)建并實現(xiàn)用于播放音頻的media_create (音頻創(chuàng)建)接口,media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將media^reate參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用。media_create 參數(shù)包括 playerld、mimeType、mimeLength,其中,playerld 表不媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度。音頻流標示通過媒體播放標示playerld和音頻類型進行描述標示,例如(1001.wav)。音頻類型包括 wav、mid1、mp3、amr、MPEG4、TONE 等。
[0045]設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài)(空閑)。
[0046]S202、創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering(設(shè)置音頻數(shù)據(jù))接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機傳入的指針中取出調(diào)用media_create (音頻創(chuàng)建)接口時創(chuàng)建的音頻文件名,作為該音頻流的標示。
[0047]Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0048]S203、創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start (啟動音頻播放)接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,創(chuàng)建獨立線程,循環(huán)讀取media_do_buffering(設(shè)置音頻數(shù)據(jù))接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制。
[0049]將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放時,需要實時判斷該播放器的全局狀態(tài)標志。如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對應(yīng)音頻流;如果主播放器或從播放器處于播放停止狀態(tài),則設(shè)置該播放器立即停止對應(yīng)音頻流的播放。主、從播放器在開始播放音頻時,設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放狀態(tài);播放音頻結(jié)束時,則設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放停止狀態(tài),即空閑狀態(tài)。
[0050]上述對應(yīng)主或從播放器是通過主、從播放器狀態(tài)來判定,如果第一個音頻交由主播放器進行播放,則主播放器處于占用狀態(tài),第二個音頻就交由從播放器進行播放;如果主從播放器同時在播放,則表明主從播放器都處于占用狀態(tài),第三個等待播放的音頻就等其中一個播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
[0051]S204、創(chuàng)建并實現(xiàn)音頻銷毀的media_destroy (音頻銷毀)接口,通過調(diào)用基于硬件設(shè)備的SDK提供的音頻銷毀方法,實現(xiàn)對創(chuàng)建的播放器所用資源的釋放和銷毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除。
[0052]S205、創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn)。由于KNI擴展接口為Java虛擬機統(tǒng)一定義,且為公知,這里不一一說明。例如:在創(chuàng)建media_pause (播放暫停)接口時,需將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建media_St0p (停止播放)接口時,需將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
[0053]S3、將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
[0054]本發(fā)明實施例還提供一種用于實現(xiàn)上述方法的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),包括音頻相關(guān)的KNI擴展接口獲取單元、音頻播放接口實現(xiàn)單元、Java虛擬機客戶端生成單元,其中:
[0055]音頻相關(guān)的KNI擴展接口獲取單元用于:利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口 ;
[0056]音頻播放接口實現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口,音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉 media_close 接口、音頻釋放 media_release_device 接口、設(shè)置音頻數(shù)據(jù) media_do_buffering接口、啟動音頻播放media_start接口、停止播放media_stop接口、音頻銷毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包SDK擴展實現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制;
[0057]Java虛擬機客戶端生成單元用于:將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
[0058]音頻播放接口實現(xiàn)單元包括media_create接口實現(xiàn)子單元、media_do_buffering接口實現(xiàn)子單元、media_start接口實現(xiàn)子單元、其它音頻播放接口實現(xiàn)子單元,其中:
[0059]media_create接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將media_create參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用;設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài);media_create參數(shù)包括playerId、mimeType、mimeLength,其中,playerld表示媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度;音頻流標示通過媒體播放標示playerld和音頻類型mimeType進行描述標示。
[0060]media_do_buffering接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機傳入的指針中取出調(diào)用media_create接口時創(chuàng)建的音頻文件名,作為該音頻流的標示Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
[0061]media_start接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,創(chuàng)建獨立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制。
[0062]其它音頻播放接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
[0063]本發(fā)明實施例的原理詳細闡述如下:
[0064]本發(fā)明實施例采用的Java虛擬機為Sun公司提供的開源Java虛擬機,其音頻播放是通過Java虛擬機的擴展部件JSR135 (Java Specificat1n Requests 135, Java規(guī)范要求135)實現(xiàn),JSR135是Sun公司開源Java虛擬機的模塊部件,是Java標準化組織提交給Sun公司的Java開發(fā)草案。JSR135實現(xiàn)了基于J2ME標準的音頻處理部分,與設(shè)備相關(guān)的KNI播放接口則需要終端設(shè)備自行進行擴展實現(xiàn)。
[0065]Java虛擬機的音頻處理已經(jīng)在基于J2ME規(guī)范的基礎(chǔ)上實現(xiàn)了,而針對音頻流通過設(shè)備進行最終播放的方法都是需要基于JSR135的KNI接口擴展實現(xiàn),且其播放操作僅僅停留在對音頻流的直接播控操作。本發(fā)明通過擴展JSR135的KNI接口,實現(xiàn)創(chuàng)建主播放器和從播放器,讓Java游戲?qū)崿F(xiàn)兩路音頻能同時播放成為可能,而且避免了現(xiàn)有技術(shù)中一個播放器對上層Java虛擬機傳入的多路音頻流來回切換播放,而可能造成的音頻不連貫或音頻與畫面不匹配等問題。
[0066]在實現(xiàn)音頻創(chuàng)建接口時創(chuàng)建主播放器和從播放器,將當前播放參數(shù)的媒體播放標示存儲到一個指針中。在實現(xiàn)設(shè)置音頻數(shù)據(jù)接口時,將接收到上層Java虛擬機調(diào)用該接口而傳入的音頻流存儲到內(nèi)存中或設(shè)備內(nèi)可讀寫區(qū)域的文件中。通過Java虛擬機傳入的指針獲取媒體播放標示,并結(jié)合音頻流所屬的音頻類型生成標識該音頻的音頻文件名(如1001.wav)。在實現(xiàn)啟動音頻播放接口時,根據(jù)Java虛擬機傳入的指針獲取媒體播放標示,并創(chuàng)建音頻播放線程。該線程根據(jù)主從播放器的播控空閑狀態(tài),并根據(jù)媒體播放標示獲取存儲在內(nèi)存中的音頻流或設(shè)備內(nèi)可讀寫區(qū)域的對應(yīng)音頻文件,通過線程不停的讀取并向硬件指定的音頻緩存區(qū)中寫入以實現(xiàn)音頻播放。播放過程中重置當前所屬主播放器或從播放器的使用狀態(tài)。
[0067]判斷主從播放器的播控空閑狀態(tài)是用于將當前音頻切換到主、從播放器中空閑狀態(tài)的播放器進行播放。音頻播放過程中,當調(diào)用media_pause(播放暫停)時,則該播放線程暫停,并向硬件指定的音頻緩存區(qū)中寫音頻流以達到暫停播放的功能;當調(diào)用media_stop (停止播放)時,則該播放線程停止向硬件指定的音頻緩存區(qū)中寫音頻流,并結(jié)束退出該線程。
[0068]本領(lǐng)域的技術(shù)人員可以對本發(fā)明實施例進行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護范圍之內(nèi)。
[0069]說明書中未詳細描述的內(nèi)容為本領(lǐng)域技術(shù)人員公知的現(xiàn)有技術(shù)。
【權(quán)利要求】
1.一種在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于,包括以下步驟: 51、利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口; 52、根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動音頻播放media_start接口、停止播放media_stop接口、音頻銷毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包SDK擴展實現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制; 53、將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
2.如權(quán)利要求1所述的在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于:步驟S2中所述實現(xiàn)硬件設(shè)備的音頻播放接口的流程如下: 5201、創(chuàng)建并實現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將media^reate參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用;設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài); 5202、創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存的音頻文件中,并從Java虛擬機傳入的指針中取出調(diào)用media_create接口時創(chuàng)建的音頻文件名,作為該音頻流的標示; 5203、創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,倉Il建獨立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制; 5204、創(chuàng)建并實現(xiàn)音頻銷毀的media_destroy接口,通過調(diào)用基于硬件設(shè)備的SDK提供的音頻銷毀方法,實現(xiàn)對創(chuàng)建的播放器所用資源的釋放和銷毀,并將之前創(chuàng)建并存入內(nèi)存的音頻文件清除; 5205、創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn):在創(chuàng)建播放暫停media_pause接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
3.如權(quán)利要求2所述的在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于:步驟S201中所述 media_create 參數(shù)包括 playerld、mimeType、mimeLength,其中,playerld 表不媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度;音頻流標示通過媒體播放標示playerld和音頻類型mimeType進行描述標不O
4.如權(quán)利要求2所述的在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于:步驟S202中所述Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
5.如權(quán)利要求2所述的在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于:步驟S203中將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放時,實時判斷該播放器的全局狀態(tài)標志,如果主播放器或從播放器處于播放暫停狀態(tài),則設(shè)置該播放器暫停播放對應(yīng)音頻流;如果主播放器或從播放器處于播放停止狀態(tài),則設(shè)置該播放器立即停止對應(yīng)音頻流的播放;主、從播放器在開始播放音頻時,設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放狀態(tài);播放音頻結(jié)束時,則設(shè)置對應(yīng)播放器的全局狀態(tài)標志為播放停止狀態(tài),即空閑狀態(tài)。
6.如權(quán)利要求2至5中任一項所述的在Java虛擬機中實現(xiàn)混音播放的方法,其特征在于:步驟S203中所述對應(yīng)主或從播放器是通過主、從播放器狀態(tài)來判定,如果第一個音頻交由主播放器進行播放,則主播放器處于占用狀態(tài),第二個音頻就交由從播放器進行播放;如果主從播放器同時在播放,則表明主從播放器都處于占用狀態(tài),第三個等待播放的音頻就等其中一個播放完后再交由主從播放器中空閑的播放器繼續(xù)播放。
7.用于實現(xiàn)權(quán)利要求1至6中任一項所述方法的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),其特征在于:包括音頻相關(guān)的KNI擴展接口獲取單元、音頻播放接口實現(xiàn)單元、Java虛擬機客戶端生成單元,其中: 所述音頻相關(guān)的KNI擴展接口獲取單元用于:利用Java虛擬機的擴展部件JSR135獲取與音頻相關(guān)的KNI擴展接口 ; 所述音頻播放接口實現(xiàn)單元用于:根據(jù)JSR135部件提供的音頻相關(guān)KNI擴展接口,實現(xiàn)硬件設(shè)備的音頻播放接口,所述音頻播放接口包括音頻創(chuàng)建media_create接口、音頻關(guān)閉media_close接口、音頻釋放media_release_device接口、設(shè)置音頻數(shù)據(jù)media_do_buffering接口、啟動音頻播放media_start接口、停止播放media_stop接口、音頻銷毀media_destroy接口 ;硬件設(shè)備支持創(chuàng)建兩個播放器并同時播放,通過基于硬件設(shè)備的軟件開發(fā)工具包SDK擴展實現(xiàn)所述音頻播放接口,初始化硬件設(shè)備,創(chuàng)建主播放器、從播放器,實現(xiàn)主、從播放器的混音播放控制; 所述Java虛擬機客戶端生成單元用于:將JSR135部件編入Java虛擬機中,生成支持音頻播放和混音播放的Java虛擬機客戶端。
8.如權(quán)利要求7所述的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),其特征在于:所述音頻播放接口實現(xiàn)單元包括media_create接口實現(xiàn)子單元、media_do_buffering接口實現(xiàn)子單元、media_start接口實現(xiàn)子單元、其它音頻播放接口實現(xiàn)子單元,其中: 所述media_create接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于播放音頻的音頻創(chuàng)建media_create接口,所述media_create接口用于初始化硬件設(shè)備、創(chuàng)建主播放器和從播放器,并結(jié)合media_create參數(shù)生成音頻流標示,將media_create參數(shù)設(shè)置到指針返回值中,以便調(diào)用其它播控方法時傳入使用;設(shè)置主、從播放器的全局狀態(tài)標志:播放狀態(tài)、暫停播放狀態(tài)和播放停止狀態(tài); 所述media_do_bufTering接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于設(shè)置音頻數(shù)據(jù)的media_do_buffering接口,將傳入的待播放音頻流存入內(nèi)存中,并從Java虛擬機傳入的指針中取出調(diào)用media_create接口時創(chuàng)建的音頻文件名,作為該音頻流的標示; 所述media_start接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)用于啟動音頻播放的media_start接口,根據(jù)Java虛擬機傳入的指針中存儲的待播放音頻的音頻流標示,創(chuàng)建獨立線程,循環(huán)讀取media_do_buffering接口傳入的音頻流數(shù)據(jù),并存儲在內(nèi)存中該音頻流標示對應(yīng)的音頻流中,將讀取的音頻流交由對應(yīng)主或從播放器進行音頻播放,實現(xiàn)主、從播放器的混音播放控制; 所述其它音頻播放接口實現(xiàn)子單元用于:創(chuàng)建并實現(xiàn)其它音頻播放接口,通過結(jié)合硬件設(shè)備的對應(yīng)SDK播控接口或方法實現(xiàn):在創(chuàng)建播放暫停media_pauSe接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為播放暫停狀態(tài);在創(chuàng)建停止播放media_stop接口時,將對應(yīng)的播放器全局狀態(tài)標志設(shè)置為停止狀態(tài);實現(xiàn)用于設(shè)置音量大小的media_set_volume接口:通過調(diào)用硬件設(shè)備的音量設(shè)置函數(shù)或方法,并將該接口傳入音量大小參數(shù)作為音量值進行設(shè)置即可。
9.如權(quán)利要求8所述的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),其特征在于:所述media_create 參數(shù)包括 playerId、mimeType、mimeLength,其中,playerld 表不媒體播放標示,每個音頻在游戲中的唯一標示;mimeType表示音頻類型;mimeLength表示mimeType的長度;音頻流標示通過媒體播放標示playerld和音頻類型mimeType進行描述標示。
10.如權(quán)利要求8所述的在Java虛擬機中實現(xiàn)混音播放的系統(tǒng),其特征在于:所述Java虛擬機傳入的指針包括播放標示ID、音頻流總長度、音頻類型、音頻流文件名、wave格式音頻文件的聲道數(shù)、比特率和采樣率,其中,播放標示ID用長整形表示,音頻流總長度用整形表示,音頻類型用整形表示,用于標示當前音頻流的類型;音頻流文件名用字符型表示,存儲在內(nèi)存中或設(shè)備的可讀寫區(qū)域內(nèi);wave格式音頻文件的聲道數(shù)、比特率、采樣率均用整形表示。
【文檔編號】G11C7/16GK104269185SQ201410454859
【公開日】2015年1月7日 申請日期:2014年9月9日 優(yōu)先權(quán)日:2014年9月9日
【發(fā)明者】劉焱青, 李明春, 王子鍵, 石磊 申請人:烽火通信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
修文县| 乡城县| 新化县| 万全县| 福安市| 天等县| 响水县| 新野县| 呼和浩特市| 泾川县| 清丰县| 兖州市| 江川县| 阿勒泰市| 万州区| 鹤山市| 平阴县| 神农架林区| 邵东县| 门头沟区| 金溪县| 宜春市| 阿鲁科尔沁旗| 永靖县| 湘阴县| 襄樊市| 杭州市| 额济纳旗| 西丰县| 铁岭县| 舟曲县| 五华县| 苗栗县| 大同县| 磐安县| 广南县| 阳西县| 革吉县| 定日县| 镇远县| 新郑市|