版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 教學(xué)內(nèi)容確定 MMAPI 包及其組件 javax.microedition.mediajavax.microedition.media.control tocolMMAPI 包播放音頻和視頻 開(kāi)發(fā)一個(gè)自動(dòng)唱片點(diǎn)唱機(jī)應(yīng)用程序 MIDP1.0與MMAPInMIDP1.0缺乏對(duì)多媒體的支持,哪怕是簡(jiǎn)單的音頻播放都不支持,移動(dòng)多媒體API徹底解決了J2ME平臺(tái)對(duì)多媒體支持的不足,提供了一個(gè)功能強(qiáng)大、設(shè)計(jì)靈活,且使用簡(jiǎn)單的框架來(lái)處理音頻和視頻。nMMAPI主要針對(duì)具有高級(jí)聲音和多媒體能力的J2ME設(shè)備課程5A /幻
2、燈片3/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 移動(dòng)多媒體 API 簡(jiǎn)介 目前市面上存在大量不同的媒體格式,并且還有許多新的媒體格式即將被建立。為了傳輸和存儲(chǔ)這些媒體格式,存在著許多不同格式的存儲(chǔ)設(shè)備和傳輸協(xié)議 為了能夠使用一定設(shè)備能夠訪問(wèn)這些不同格式的媒體,必須為其設(shè)計(jì)一個(gè)規(guī)范化的、強(qiáng)大的和可擴(kuò)充的應(yīng)用接口。J2ME提供了一套為規(guī)范播放和錄制音頻或視頻接口,即移動(dòng)多媒體 API(MMAPI)。移動(dòng)多媒體 API(MMAPI)提供了一組類和接口,可以用來(lái)在移動(dòng)設(shè)備上創(chuàng)建和播放多媒體內(nèi)容。例如,可以使用 MMAPI 創(chuàng)建聲音,也可以用它來(lái)捕捉音頻和視頻數(shù)據(jù)。MMAPI 是一個(gè)可選包,可在
3、支持 J2ME 的設(shè)備上支持多媒體應(yīng)用程序。 此 Java 規(guī)范由JCP 在 JSR 135 中定義。其設(shè)計(jì)目的是運(yùn)行任意協(xié)議和格式;例如,它沒(méi)有指定實(shí)現(xiàn)必須支持特定傳輸協(xié)議(如 HTTP 或?qū)崟r(shí)傳輸協(xié)議 (RTP))或媒體格式(如 MP3、MIDI 或 MPEG-4)。使用 MIDP 2.2 開(kāi)發(fā)的 J2ME 應(yīng)用程序可以訪問(wèn) MMAPI 1.1。 因此,這些應(yīng)用程序還能夠捕獲和播放視頻及圖片。 但是,MIDP 2.0 提供的多媒體功能僅限于音頻支持。課程5A /幻燈片4/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu) MMAPI 定義了一組(共三個(gè))包,用于播
4、放和控制移動(dòng)設(shè)備上的多媒體內(nèi)容。MMAPI 中定義的三個(gè)包是: javax.microedition.media:提供用來(lái)創(chuàng)建和管理Player對(duì)象的Manager類。 Player對(duì)象表示移動(dòng)設(shè)備中的多媒體播放器。 javax.microedition.media.control:提供各種類型的控制接口,可以用于 Player 對(duì)象。tocol:用于設(shè)定協(xié)議,以控制用戶自定義的控件。只在MMAPI中提供該包,并且它不是MIDP 2.0的一部分。 課程5A /幻燈片5/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及
5、其架構(gòu)(續(xù))MMAPI中的三個(gè)包提供了一組用來(lái)在移動(dòng)設(shè)備上播放和控制多媒體內(nèi)容的類和接口。 下表中列出了 MMAPI 包中定義的類: 類類描述描述Manager根據(jù)指定的多媒體內(nèi)容來(lái)創(chuàng)建Player對(duì)象。 該類是在javax.microedition.media包中指定的。ContentDescriptor創(chuàng)建一個(gè)用來(lái)存儲(chǔ)特定的媒體類型的容器。 該類是在tocol包中指定的。DataSource表示一個(gè)用來(lái)處理媒體的抽象,它隱藏了訪問(wèn)各種源的數(shù)據(jù)的過(guò)程細(xì)節(jié),如來(lái)自服務(wù)器的文件或流數(shù)據(jù)。 Player對(duì)象使用該類來(lái)訪問(wèn)輸入數(shù)據(jù)。 該類是在j
6、tocol包中指定的。課程5A /幻燈片6/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu)(續(xù)) 接口接口描述描述Control用來(lái)控制一個(gè)Player對(duì)象的媒體重放功能。 在javax.microedition.media中定義該接口。 Controllable用來(lái)從Player對(duì)象中檢索控件。 該接口提供了用來(lái)查詢Player對(duì)象并檢索所需信息的方法。 在javax.microedition.media中定義該接口。Player用來(lái)播放多媒體內(nèi)容。 在javax.microedition.media中定義該
7、接口。PlayerListener用來(lái)接收Player對(duì)象產(chǎn)生的異步事件。 在javax.microedition.media中定義該接口。TimeBase用于一個(gè)提供時(shí)間測(cè)量的源。 可以使用該接口來(lái)測(cè)量同步多個(gè)Player對(duì)象的時(shí)間進(jìn)度。 在tocol中定義該接口。SourceStream和一個(gè)DataSource對(duì)象一起使用以便向一個(gè)Player對(duì)象提供輸入接口。 在tocol中定義該接口。FramePositioningControl指定和控制視頻播放器中視頻幀的位置。 在ja
8、tocol中定義該接口。GUIControl用來(lái)控制使用移動(dòng)設(shè)備的GUI功能的Player對(duì)象。 在javax.microedition.media.control中定義該接口。課程5A /幻燈片7/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu)(續(xù))接口接口描述描述MetaDataControl用于檢索和控制多媒體流中存儲(chǔ)的元數(shù)據(jù)信息。這個(gè)接口定義在 javax.microedition.media.control 中。MIDIControl可以用于訪問(wèn)和控制 MIDI-playing 設(shè)備。該接口定義在 ja
9、vax.microedition.media.control 中。PitchControl在不影響回放速度的前提下,提高和降低聲音的音調(diào)。這個(gè)接口定義在 javax.microedition.media.control 中。課程5A /幻燈片8/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu)(續(xù))接口接口描述描述RateControl控制多媒體內(nèi)容在 Player 對(duì)象中的播放速度。這個(gè)接口定義在 javax.microedition.media.control 中。RecordControl控制 Player 對(duì)象中多媒體內(nèi)容的錄取。這個(gè)接口定義在 javax.
10、microedition.media.control 中。StopTimeControl用于預(yù)設(shè)定時(shí)器,以停止一個(gè)播放器。這個(gè)接口定義在 javax.microedition.media.control 中。課程5A /幻燈片9/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu)(續(xù))接口接口描述描述TempoControl用于控制聲音的節(jié)奏。節(jié)奏定義為每分鐘的拍數(shù)。這個(gè)接口定義在 javax.microedition.media.control 中。ToneControl用于播放和控制用戶定義的音調(diào)序列。這個(gè)接口定義在 javax.microedition.medi
11、a.control 中。VideoControl用于控制視頻數(shù)據(jù)在 Player 對(duì)象上的播放。這個(gè)接口定義在 javax.microedition.media.control 中。課程5A /幻燈片10/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 描述 MMAPI 包及其架構(gòu)(續(xù))接口接口描述描述VolumeControl控制一個(gè) Player 對(duì)象的音量。這個(gè)接口定義在 javax.microedition.media.control 中。課程5A /幻燈片11/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 MMAPI 架構(gòu)ManagerMultimediaDataMultimedi
12、aOutputControlControlDataSourcePlayerCreatesCreatesand uses課程5A /幻燈片12/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 MMAPI 架構(gòu)MMAPI 架構(gòu)由四個(gè)組件構(gòu)成:Manager 類 是整個(gè)MMAPI框架的入口,它將和其他三部分緊密地組織在一起。管理器提供了靜態(tài)方法可以創(chuàng)建各種類型的播放器,還可以查詢播放器支持的協(xié)議格式和媒體類型Player 接口: 其作用在于正確處理某種類型的媒體內(nèi)容,比如某種類型的播放器能夠正確播放MP3格式的文件,而另一種類型的播放器能夠播放3gpp格式的視頻文件。Control:用來(lái)改變播放器的
13、行為。VolumeControl可以調(diào)整音頻播放器的聲音大小。VideoControl可以控制攝像區(qū)域的位置和大小, Control 接口定義在javax.microedition.media包中,其子類都定義在javax.microedition.media.control 包中。DataSource 類:數(shù)據(jù)源知道如何從多媒體文件的位置取得媒體內(nèi)容提供給播放器,媒體文件可以存儲(chǔ)在WEB服務(wù)器,RMS持久存儲(chǔ)空間或者文件系統(tǒng)。媒體數(shù)據(jù)可以通過(guò)HTTP或者RTP等協(xié)議傳輸給Player。課程5A /幻燈片13/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 你可以使用 MMA
14、PI 中定義的類和接口來(lái)創(chuàng)建和控制多媒體內(nèi)容。為了創(chuàng)建和控制多媒體內(nèi)容,需要在移動(dòng)設(shè)備上實(shí)現(xiàn)MMAPI的各種接口和類。 你可以使用 MMAPI 來(lái)控制移動(dòng)設(shè)備的特定多媒體應(yīng)用程序,比如播放不同的格式的電話鈴聲和聲音文件。你也可以使用 MMAPI 來(lái)在移動(dòng)設(shè)備上播放和記錄視頻。為了能夠播放多媒體內(nèi)容,你需要?jiǎng)?chuàng)建一個(gè) Player 對(duì)象,并且要指定需要播放的數(shù)據(jù)。 Manager類根據(jù)指定的多媒體內(nèi)容來(lái)實(shí)現(xiàn)適當(dāng)?shù)腜layer接口。例如,如果在Manager類的createPlayer()方法中指定一個(gè)視頻文件,會(huì)生成一個(gè)能夠播放特定的視頻文件的Player對(duì)象。 MMAPI 也可以用于直接播放多媒
15、體內(nèi)容,而無(wú)需用到 Player 對(duì)象。例如,可以使用Manager類的playTone()方法在移動(dòng)設(shè)備上播放單音。MMAPI特性n支持單音,重復(fù)播放和記錄基于時(shí)間的多媒體文件 n以CLDC為目標(biāo) n設(shè)計(jì)小巧,目的為了節(jié)省資源 nMMAPI并非針對(duì)任何內(nèi)容類型和協(xié)議 n可以只實(shí)現(xiàn)MMAPI的子集,這就是為什么MIDP2.0中能夠只實(shí)現(xiàn)其子集的原因 n擴(kuò)展性強(qiáng),MMAPI在不修改原來(lái)的功能的情況下可以添加新的功能,更重要的是,可以輕松支持額外的格式,API框架為額外的控制預(yù)留了位置。 n選擇性實(shí)現(xiàn) 實(shí)現(xiàn)者可以只實(shí)現(xiàn)部分功能MMAPI的主要任務(wù)n處理數(shù)據(jù)傳輸協(xié)議 意義在在于把數(shù)據(jù)源從文件、流媒體
16、服務(wù)器或者設(shè)備的攝像頭等位置讀入到媒體處理系統(tǒng)中。n處理數(shù)據(jù)內(nèi)容n意義在于將數(shù)據(jù)解析、解碼并繪制到輸出設(shè)備上,如揚(yáng)聲器或者手機(jī)屏幕上。 這兩個(gè)任務(wù)主要由Player和DataSource類分別來(lái)完成的, DataSource屏蔽數(shù)據(jù)來(lái)源的細(xì)節(jié),不管它是從哪里過(guò)來(lái)的,可以是流、文件或者服務(wù)器資源等等。而Player則負(fù)責(zé)解碼工作,繪制DataSource提供的數(shù)據(jù)到輸出設(shè)備上。媒體數(shù)據(jù)數(shù)據(jù)源播放器http,rtp,file利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件MMAPI 提供了各種類和接口,可以用于實(shí)現(xiàn)移動(dòng)設(shè)備的多媒體框架的各種組件。例如,Player類代表移動(dòng)設(shè)備中的多
17、媒體播放工具并且有助于實(shí)現(xiàn)該工具。 PlayerListener接口定義了事件類型,這些事件類型用來(lái)處理播放多媒體內(nèi)容時(shí)出現(xiàn)的不同類型的事件。 將控制接口(如VideoControl和VolumeControl)添加到Player對(duì)象,以便允許移動(dòng)用戶在移動(dòng)設(shè)備上控制多媒體內(nèi)容的特性,如音量和節(jié)奏。MMAPI 為使用移動(dòng)設(shè)備捕捉和存儲(chǔ)多媒體內(nèi)容提供了支持??梢允褂?VideoControl對(duì)象實(shí)現(xiàn)一個(gè)取景器,以用于在移動(dòng)設(shè)備上觀看多媒體內(nèi)容。 在取景器中觀看內(nèi)容的同時(shí),還可以使用VideoControl.getSnapshot(String imageType)方法來(lái)拍照,并將照片保存為可移植
18、網(wǎng)絡(luò)圖像(PNG)格式。實(shí)現(xiàn) Manager 類Manager 類是一個(gè)靜態(tài)工廠類,可以用于創(chuàng)建 Player 對(duì)象。Manager 類定義了三個(gè)重載的 createPlayer() 方法,用于創(chuàng)建 Player 對(duì)象。利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件實(shí)現(xiàn) Manager 類Manager 類是一個(gè)靜態(tài)工廠類,可以用于創(chuàng)建 Player 對(duì)象。Manager 類定義了三個(gè)重載的 createPlayer() 方法,用于創(chuàng)建 Player 對(duì)象。static Player createPlayer(String LOCATION):創(chuàng)建了Player對(duì)象,以用于播放
19、多媒體文件。 使用URI定位符字符串LOCATION來(lái)指定多媒體文件的網(wǎng)絡(luò)位置。 static Player createPlayer(InputStream is, String type):創(chuàng)建了Player對(duì)象來(lái)播放多媒體文件。 使用InputStream對(duì)象來(lái)指定多媒體文件的數(shù)據(jù),多媒體文件的MIME類型被指定為String對(duì)象type。 方法的這個(gè)版本允許您播放本地存儲(chǔ)的多媒體內(nèi)容。static Player createPlayer(DataSource DS):創(chuàng)建了Player對(duì)象來(lái)播放多媒體文件。 該P(yáng)layer對(duì)象播放由DataSource對(duì)象指定的多媒體數(shù)據(jù)。 DataS
20、ource對(duì)象提供了連接并播放自定義數(shù)據(jù)源的多媒體數(shù)據(jù)的方法。 課程5A /幻燈片18/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))下表中列出了 Manager 類中定義的其它方法: 方法方法描述描述getSupportedContentTypes(String Protocol)返回指定的協(xié)議支持的多媒體內(nèi)容類型列表。 內(nèi)容類型標(biāo)識(shí)多媒體數(shù)據(jù)的類型,如MP3音頻文件、MIDI文件和MPEG視頻文件。getSupportedProtcols(String content_type)返回指定內(nèi)容類型所支持的多媒體協(xié)議列表。 協(xié)議示例包括:磁盤I/O和流媒體I/O。
21、getSystemTimeBase()返回TimeBase接口的一個(gè)對(duì)象。playTone(int note, int time, int volume)按照它的音調(diào)和持續(xù)時(shí)間來(lái)播放聲音。課程5A /幻燈片19/共33張利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))實(shí)現(xiàn) Player 接口Player 是一個(gè) javax.microedition.media 包中定義的接口,它是 Controllable 接口的擴(kuò)展。 Player接口表示Player類的一般行為,由各種實(shí)現(xiàn)了MMAPI的供應(yīng)商來(lái)實(shí)現(xiàn)這些Player類。 通過(guò)使用Manager類對(duì)象的createPlay
22、er()方法來(lái)創(chuàng)建一個(gè)Player對(duì)象。 CLOSEDUNREALIZEDSTARTEDclosed()closed()realize()prefetch()start()stop()deallocate()deallocate()REALIZEDPREFETCHEDclosed()closed()Player對(duì)象的生命周期Player對(duì)象的生命周期對(duì)象的生命周期n當(dāng)首次構(gòu)造一個(gè)Player時(shí),它處于UNREAIZED階段。 可以使用realize()方法將Player對(duì)象從UNREALIZED階段轉(zhuǎn)換到REALIZED階段。 在這個(gè)轉(zhuǎn)換過(guò)程中,Player對(duì)象查找播放多媒體內(nèi)容所需的資源。
23、n當(dāng)您準(zhǔn)備播放內(nèi)容時(shí),可以使用prefetch()方法將Player對(duì)象從REALIZED階段轉(zhuǎn)移到PREFETCHED階段。 您可以使用start()方法來(lái)播放內(nèi)容。 當(dāng)調(diào)用start()方法時(shí),Player對(duì)象轉(zhuǎn)移到STARTED階段。 當(dāng)調(diào)用stop()方法或Player 對(duì)象遇到多媒體內(nèi)容的結(jié)尾時(shí),Player對(duì)象將停止播放多媒體內(nèi)容。 在這兩種情況下,Player對(duì)象從STARTED階段轉(zhuǎn)移到PREFETCED階段。 您還可以調(diào)用close()方法來(lái)結(jié)束Player生命周期并將它送至CLOSED階段。n您可以根根據(jù)要求在Player對(duì)象的不同階段之間進(jìn)行切換。 因此,Player對(duì)象
24、的生命周期中的不同階段可以幫助您有效地管理移動(dòng)設(shè)備的內(nèi)存和資源。 例如,在播放多媒體內(nèi)容之前,可以使Player保持在UNREALIZED階段,從而節(jié)省將播放器保持在REALIZED和STARTED階段所需的內(nèi)存開(kāi)銷。 利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))下表列出了 Player 對(duì)象生命周期的五個(gè)階段: 階段階段描述描述UNREALIZED初始化階段,在該階段中創(chuàng)建Player對(duì)象,Player對(duì)象不處理必要的信息以獲取播放多媒體內(nèi)容的資源。REALIZED在這個(gè)階段,Player對(duì)象獲取必要的信息以得到播放多媒體內(nèi)容所需的資源。 在這個(gè)階段并沒(méi)有獲得系統(tǒng)相關(guān)
25、的資源PREFETCHED 在這個(gè)階段,播放器獲得了播放多媒體內(nèi)容所需的所有資源。 這些資源還包括系統(tǒng)相關(guān)的資源。 預(yù)取過(guò)程將播放器的啟動(dòng)時(shí)間縮減到最小值。STARTED表示播放器當(dāng)前正在處理多媒體內(nèi)容的階段。CLOSED在這個(gè)階段,Player對(duì)象已經(jīng)到達(dá)其生命周期的末尾。 在Player對(duì)象到達(dá) CLOSED狀態(tài)后,不能再次重用它。代碼tonePlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR); tonePlayer.setLoopCount(1); / Loop only once tonePlayer.realize()
26、; ToneControl tc = (ToneControl)tonePlayer.getControl(javax.microedition.media.control.ToneControl);創(chuàng)建了一個(gè)Player對(duì)象并提供了用來(lái)處理播放器音調(diào)的控件利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))實(shí)現(xiàn) Control 和 Controllable 接口 Control 接口提供了一組用于處理多媒體內(nèi)容的方法。可以使用Controllable對(duì)象的getControl()和getControls()方法從實(shí)現(xiàn)了Controllable接口的Player對(duì)象中檢索Con
27、trol對(duì)象。 MMAPI定義了其他幾個(gè)從Control接口派生而來(lái)的控制接口,用來(lái)表示不同的控制類型。 使用這些控制來(lái)管理多媒體內(nèi)容。 利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))實(shí)現(xiàn) PlayerListener 接口 PlayerListener 接口監(jiān)聽(tīng) Player 對(duì)象生成的所有異步事件??梢栽谝粋€(gè)多媒體應(yīng)用程序中實(shí)現(xiàn)這個(gè)接口,并使用Player接口的addPlayerListener()方法來(lái)注冊(cè)此實(shí)現(xiàn)。 PlayerListener接口定義了多個(gè)String類型的靜態(tài)字段,用來(lái)表示在播放多媒體內(nèi)容時(shí)可能出現(xiàn)的事件。 例如,RECORD_STARTED字符
28、串表示當(dāng)Player對(duì)象開(kāi)始錄制多媒體內(nèi)容時(shí)發(fā)生的事件。 與此類似,STARTED字符串表示當(dāng)啟動(dòng)Player對(duì)象時(shí)出現(xiàn)的事件。利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 實(shí)現(xiàn) MMAPI 組件(續(xù))實(shí)現(xiàn) DataSource 類DataSource 類用于創(chuàng)建和檢索多媒體數(shù)據(jù)源。 DataSource類隱藏了如何從各種類型的源(如文件、網(wǎng)絡(luò)服務(wù)器或RMS存儲(chǔ))讀取數(shù)據(jù)的細(xì)節(jié)。 DataSource類是一個(gè)抽象的類,用來(lái)派生從各種源(如網(wǎng)絡(luò)、RMS數(shù)據(jù)源和數(shù)據(jù)文件)實(shí)現(xiàn)流式多媒體數(shù)據(jù)的類。 使用從DataSource類的派生而來(lái)的類的對(duì)象,您能夠任意地訪問(wèn)多媒體數(shù)據(jù)。 因此,與使用InputStr
29、eam對(duì)象訪問(wèn)多媒體內(nèi)容相比,DataSource對(duì)象提供了能更簡(jiǎn)單地訪問(wèn)多媒體內(nèi)容的方法??梢允褂肕anager.createPlayer()方法為一個(gè)自定義DataSource對(duì)象提供的數(shù)據(jù)創(chuàng)建一個(gè)播放器。 DataSource 類的常用方法包括: connect() start() stop() getStream()利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 利用 MMAPI 生成音調(diào) 你可以利用 Manager 類的 playTone() 方法,在移動(dòng)設(shè)備上生成音調(diào)。 下面是 playTone() 方法的參數(shù): 音符(note):Note 參數(shù)的值應(yīng)該在0127之間。 時(shí)間間隔(dura
30、tion):指定音調(diào)應(yīng)該被播放的時(shí)間間隔。 音量(volume) :Volume 參數(shù)的值在0100之間。 playTone()方法在持續(xù)特定時(shí)間內(nèi)生成單音,可以使用playTone()方法通過(guò)播放一連串的曲調(diào)來(lái)創(chuàng)建音樂(lè)。 可以將playTone()方法放在一個(gè)循環(huán)內(nèi)來(lái)生成一連串的曲調(diào)。playTone() 方法可以拋出以下兩種異常: IllegalArgumentExceptionMediaException代碼n以下的代碼段通過(guò)調(diào)用一個(gè)循環(huán)中的playTone()方法來(lái)播放一連串的聲音:for(int counter=0; counter 100; counter.+) int NOTE=
31、 (int) (System.currentTimeMillis() % 127); Manager.playTone(NOTE, 100, 100); /Move the clock forward Thread.currentThread().sleep(10); n上一段代碼調(diào)用了playTone()方法100次來(lái)播放一連串的曲調(diào)。 根據(jù)當(dāng)前的系統(tǒng)時(shí)間來(lái)計(jì)算不同的NOTE參數(shù)值,該值的測(cè)量單位是毫秒并將它除以127來(lái)得到位于0到127之間的余數(shù)。將音量和持續(xù)時(shí)間參數(shù)指定為100。利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 播放不同格式的聲音文件 你可以利用 MMAPI 的 Player 接口
32、播放各種格式的聲音文件。 利用 MMAPI 的 Player 類可以播放的常用文件格式有: 即將被播放的 MIDI 文件被存儲(chǔ)在本地的 RMS 中,可以利用 InputStream 對(duì)象中的istream 對(duì)其進(jìn)行檢索。 MIME類型描述audio/midiMIDI文件audio/sp-midi可升級(jí)的多音MIDIaudio/mpegMP3文件audio/x-wavWAV PCM取樣音頻image/gifFIG89a(活動(dòng)的GIF)video/mpegMPEG視頻播放一個(gè)帶有.WAV擴(kuò)展名的聲音文件 int id;/ play back from a record storetry Input
33、Stream istream = getClass().getResourceAsStream(audio.wav);Player WAVplayer = Manager.createPlayer(istream, audio/X-wav);WAVplayer.start(); catch (IOException ioe) catch (MediaException me) .使用Player類來(lái)播放MP3文件 Player mp3player;VolumeControl vcontrol;try mp3player = Manager.createPlayer(http:/server/m
34、usic.mp3); mp3player.realize(); / get volume control for player and set volume to half max value vcontrol = (VolumeControl) mp3player.getControl(VolumeControl); if(vcontrol != null) vcontrol.setVolume(50); / start the player mp3player.start(); catch(IOException IOex) catch(MediaException ex) .Player
35、類實(shí)現(xiàn)了一個(gè)MIDI文件播放器int id;/ play back from a record storetry InputStream istream= getClass().getResourceAsStream(audio.mid);Player midiplayer = Manager.createPlayer(is, audio/midi);midiplayer.start(); catch (IOException ioe) catch (MediaException me) .上面的代碼段創(chuàng)建了midiPlayer Player對(duì)象。 要播放的MIDI文件存儲(chǔ)在本地RMS中并使用
36、InputStream對(duì)象istream來(lái)檢索該文件。 利用 Java 開(kāi)發(fā)和實(shí)現(xiàn)移動(dòng)應(yīng)用程序 播放和控制視頻 利用 MMAPI 的接口和類,你可以播放、捕捉和錄制視頻。 用于在移動(dòng)設(shè)備上播放視頻的 Player 對(duì)象應(yīng)該提供用于控制視頻回放的 VideoControl 對(duì)象。利用 Player 對(duì)象的 getControl() 或 getControls()方法,可以返回 VideoControl 對(duì)象。通過(guò)對(duì) Canvas 類進(jìn)行擴(kuò)展,以及使用各種MMAPI 類和接口的對(duì)象,你可以創(chuàng)建一個(gè)視頻播放器并播放視頻文件。public class CanvasVideo extends Canva
37、s implements PlayerHost, CommandListener private Player vplayer; private int width, height; private Command done; public CanvasVideo () width = getWidth(); height = getHeight(); done = new Command(Done, Command.OK, 1); addCommand (done); setCommandListener (this); public void startPlayer (Player p)
38、vplayer = p; try VideoControl v= (VideoControl) vplayer.getControl(VideoControl); v.initDisplayMode(/Use the field USE_DIRECT_VIDEO because video is directly played on the Canvas VideoControl.USE_DIRECT_VIDEO, this); v.setDisplayLocation(2, 2); v.setDisplaySize(width - 4, height - 4); vplayer.start (); catch(Exception ex) ex.printStackTrace();
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學(xué)校食品衛(wèi)生安全工作計(jì)劃例文(二篇)
- 2024年工程承包合同協(xié)議參考模板(五篇)
- 2024年學(xué)前班班主任工作總結(jié)常用版(二篇)
- 2024年工程質(zhì)量問(wèn)責(zé)及獎(jiǎng)懲制度模版(三篇)
- 2024年小區(qū)保安工作計(jì)劃范例(二篇)
- 2024年家電促銷活動(dòng)總結(jié)經(jīng)典版(三篇)
- 2024年小學(xué)班務(wù)工作計(jì)劃模版(五篇)
- 2024年小區(qū)保安工作計(jì)劃(二篇)
- 2024年小學(xué)實(shí)驗(yàn)教學(xué)工作計(jì)劃例文(四篇)
- 2024年吊車包月租賃合同參考樣本(二篇)
- 滅火器檢查記錄表
- 不良貸款催收管理辦法
- 中醫(yī)門診病歷書寫模板
- 湯有綸-20121027-淺談電子特氣發(fā)展趨勢(shì)totzbg20121026
- 基于西門子plc停車場(chǎng)車位控制系統(tǒng)設(shè)計(jì)
- RTO使用說(shuō)明書
- 配電柜拆除安裝施工方案(共11頁(yè))
- 廣東省中小學(xué)校教育培養(yǎng)成本表
- 最新混凝土配合比設(shè)計(jì)規(guī)程(JGJ_55-2019_)ppt課件
- DCS型電腦定量包裝秤使用說(shuō)明
- 9天干地支與十神的對(duì)照表
評(píng)論
0/150
提交評(píng)論