国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-18 15:02:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

■ 前言

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

■ 音樂(lè)播放

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

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

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

 format0 Midi的16頻聲音收錄在1個(gè)磁道上的形式

 format1

 不限制磁道數(shù)量的形式

表 1

■ 播放音樂(lè)

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

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

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

  另外,能夠從web上獲得音樂(lè)數(shù),并且能夠從RMS中得到音樂(lè)數(shù)據(jù)。但,由于形式相同,這里就不非凡講述了。具體情況請(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)
 getChannel() 取得音樂(lè)數(shù)據(jù)的頻數(shù)

 getLapsedTime()

 以MS為單位取得所演奏的音樂(lè)數(shù)據(jù)的播放時(shí)間

 getTempo()

 取得音樂(lè)數(shù)據(jù)的速度

 getTime()

 取得音樂(lè)數(shù)據(jù)的播放時(shí)間

 setLoopCount(int count)

 設(shè)定演奏的音樂(lè)數(shù)據(jù)的反復(fù)播放次數(shù)

表 2

■ 音頻事件

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

public class AudioTest implements AudioListener {

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

 public AudioTest() {
  AudioClip audio = Media.getAudioClip("/test.mid");// 讀取音樂(lè)數(shù)據(jù)
   audio.addAudioListener(this);// 注冊(cè)audio事務(wù)監(jiān)聽(tīng)器
 }

 /**
  * 音頻事件的處理
  **/

 public void audioAction(AudioClip sound, int event, int param) {
    //記述處理
      •
      •
 }
}

ex. 1

記述處理的audioAction方法的自變量如下所示。
 AudioClip sound 傳遞事件發(fā)生來(lái)源的對(duì)象

 int event

 傳遞事件的種類(lèi)

 int param

 傳遞事件的參數(shù)。由于事件不同,則參數(shù)的意思也不同。不包含參數(shù)的事件的情況下,只傳遞0

表 3

此外,事件的種類(lèi)(audioAction方法的自變量、事件)在AudioListener接口文件夾中定義如下。(表 4)
static int AUDIO_COMPLETE 表示音樂(lè)播放結(jié)束static int AUDIO_STARTED 表示音樂(lè)播放開(kāi)始static int AUDIO_COMPLETE 表示音樂(lè)播放停止

表 4


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



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 井研县| 韶山市| 巴彦县| 贵港市| 板桥市| 平乡县| 桂平市| 麦盖提县| 大新县| 建阳市| 海阳市| 绵阳市| 拉孜县| 平南县| 绿春县| 兴义市| 高邮市| 闽清县| 广宗县| SHOW| 岑巩县| 神池县| 克山县| 罗山县| 曲水县| 确山县| 长子县| 岳普湖县| 怀仁县| 巴彦淖尔市| 宝鸡市| 广平县| 鲁甸县| 治县。| 河南省| 冀州市| 布拖县| 明光市| 保山市| 射洪县| 舞钢市|