色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在MIDP應(yīng)用程序中播放聲音

          在MIDP應(yīng)用程序中播放聲音

          作者: 時(shí)間:2012-05-07 來(lái)源:網(wǎng)絡(luò) 收藏

          ■前言

          本文引用地址:http://cafeforensic.com/article/149129.htm

          在上一講中我們講述的是如何制作JAVA手機(jī)多媒體功能中的動(dòng)畫(huà),本講中我們將介紹如何制作JAVA手機(jī)的另一個(gè)多媒體功能——,即N800的音樂(lè)功能。若是在動(dòng)畫(huà)上再配以音樂(lè)功能,就能制作出具有豐富表現(xiàn)力的了。

          ■音樂(lè)

          現(xiàn)在我們利用播放音樂(lè)。但是,標(biāo)準(zhǔn)API不支持播放功能。機(jī)種不同,則播放方法也不同,所以每個(gè)廠商都會(huì)使用他們各自擴(kuò)展的API。N800使用NEC擴(kuò)展的API,所以能用播放聲音。

          ■N800的音樂(lè)播放功能

          N800只能播放SMF(format0)格式的音樂(lè)數(shù)據(jù),最大文件尺寸為10Kbyte。SMF格式即StandardMIDIFile的縮略語(yǔ),就是為了能實(shí)現(xiàn)互換性而設(shè)定的文件形式,互換性是指在不同的應(yīng)用程序中也具有能處理數(shù)據(jù)的特性。SMF分為format0和format1兩種格式。N800所采用的是format0格式。這兩種格式具有以下不同特點(diǎn)。(表1)

          360截圖20120507112828392.jpg

          表1

          ■播放音樂(lè)

          接下來(lái)我們實(shí)際操作讀取文件播放音樂(lè)的功能。

          ●音樂(lè)數(shù)據(jù)的讀取

          利用擴(kuò)展API上的Media類的static方法讀取音樂(lè)數(shù)據(jù)。自變量中記述了音樂(lè)數(shù)據(jù)文件的通過(guò)。AudioClipaudio=Media.getAudioClip(“/test.mid”);

          另外,能夠從web上獲得音樂(lè)數(shù),并且能夠從RMS中得到音樂(lè)數(shù)據(jù)。但,由于形式相同,這里就不特別講述了。詳細(xì)情況請(qǐng)參考擴(kuò)展API文檔。

          ●播放

          播放讀取的音樂(lè)數(shù)據(jù)。使用AudioClip例子(在這稱為audio)play方法播放。

          audio.play();

          而且也能同時(shí)播放兩個(gè)以上的音樂(lè)數(shù)據(jù)。此時(shí),使用AudioClip例子(在這稱為audio1、audio2)play方法播放。

          audio1.play();

          audio2.play();

          上述情況下能夠同時(shí)播放audio1,audio2。

          ●停止

          能夠暫停音樂(lè)的播放。使用AudioClip例子的stop方法能夠停止。

          audio.stop();

          ●其他功能

          AudioClip定義了讀取其他音樂(lè)數(shù)據(jù)信息的方法和決定反復(fù)播放次數(shù)的方法。(表2)

          360截圖20120507112928693.jpg

          表2

          ■音頻事件

          音頻演奏過(guò)程中,演奏開(kāi)始時(shí)、停止時(shí)、結(jié)束時(shí)都會(huì)發(fā)生音頻事件,能定義此時(shí)的處理。要定義音頻事件發(fā)生時(shí)的處理,有必要安裝AudioListener接口和記述audioAction方法內(nèi)的處理。

          然后,使用AudioClip對(duì)象的addAudioListener方法進(jìn)入AudioListener。

          publicclassAudioTestimplementsAudioListener{

          /**

          *構(gòu)造函數(shù)

          **/

          publicAudioTest(){

          AudioClipaudio=Media.getAudioClip(/test.mid);//讀取音樂(lè)數(shù)據(jù)

          audio.addAudioListener(this);//注冊(cè)audio事務(wù)監(jiān)聽(tīng)器

          }

          /**

          *音頻事件的處理

          **/

          publicvoidaudioAction(AudioClipsound,intevent,intparam){

          //記述處理

          }

          }

          ex.1

          記述處理的audioAction方法的自變量如下所示。

          360截圖20120507113031936.jpg

          表3

          此外,事件的種類(audioAction方法的自變量、事件)在AudioListener接口文件夾中定義如下。(表4)

          360截圖20120507113207575.jpg

          表4

          以下展示的是只播放音頻數(shù)據(jù)的簡(jiǎn)單范例。

          importjavax.microedition.lcdui.Display;

          importjavax.microedition.midlet.MIDlet;

          importjavax.microedition.midlet.MIDletStateChangeException;

          /**

          *音樂(lè)播放的簡(jiǎn)單范例

          */

          publicclassAudioextendsMIDlet{

          Displaydisplay;

          AudioCanvascanvas;

          /**

          *構(gòu)造函數(shù)

          */

          publicAudio(){

          canvas=newAudioCanvas();

          display=Display.getDisplay(this);

          }

          protectedvoidstartApp()throwsMIDletStateChangeException{

          display.setCurrent(canvas);

          }

          protectedvoidpauseApp(){}

          protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

          }

          importjavax.microedition.lcdui.*;

          importcom.nec.media.*;

          /**

          *音頻canvas

          **/

          publicclassAudioCanvas

          extendsCanvas

          implementsRunnable,CommandListener,AudioListener{

          CommandSTART=newCommand(play,Command.OK,0);

          CommandSTOP=newCommand(stop,Command.OK,0);

          AudioClipa;//音樂(lè)數(shù)據(jù)

          Threadth;

          /**

          *構(gòu)造函數(shù)

          **/

          publicAudioCanvas(){

          a=Media.getAudioClip(/_test.mid);//讀取音樂(lè)數(shù)據(jù)

          a.addAudioListener(this);//注冊(cè)AudioListener

          this.addCommand(START);

          this.addCommand(STOP);

          this.setCommandListener(this);

          th=newThread(this);

          th.start();

          }

          /**

          *音頻事件的處理

          */

          publicvoidaudioAction(AudioClipsound,intevent,intparam){

          if(sound==a){

          if(event==AudioListener.AUDIO_COMPLETE){

          sound.play();

          }

          }


          上一頁(yè) 1 2 3 4 下一頁(yè)

          關(guān)鍵詞: 聲音 播放 應(yīng)用程序 MIDP

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉