給遊戲添加音樂

來源:互聯網
上載者:User
 J2me通過Mobile Media API 支援手機音頻,這是在特定類型的裝置上支援不同程度的多媒體的類和介面的一個集合。更具體地說,Mobile Media API劃分為兩個不同的API集合:
    一個是Mobile Media API,主要針對進階聲音和多媒體能力;另一個是MIDP2.0 Media API,主要針對支援唯一音訊受限制的裝置。很明顯,我們主要是討論後一部分。
    MIDP2.0 Media API 圍繞著2個主要的部分進行設計:管理器,播放器,和控制器。MIDP2.0 Media API都位於javax.microedition.media 和javax.microedition.media.control包中。其中管理器Manager位於media包中,它通過為各種媒體類型建立播放器,從而使我們能夠查詢一個手機的媒體能力。播放器Player介面位於同一個包中,提供了一組通用的方法來控制音訊回放。控制器Control介面位於media.control包中,用來進行特定類型的媒體控制,例如,VolumeControl用來控制音量,ToneControl用來控制樂音。

如果要想知道我們的手機對語音支援的能力,我們可以使用下面的代碼(只提供Canvas類):
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class SCCanvas extends Canvas {
  private Display  display;
  
  public SCCanvas(Display d) {
    super();
    display = d;
  }

  void start() {
    display.setCurrent(this);
    repaint();
  }

  public void paint(Graphics g) {
    // 清除畫布
    g.setColor(0, 0, 0);        
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(255, 255, 255);  

    // 得到手機支援的聲音的類型
    String[] contentTypes = Manager.getSupportedContentTypes(null);

    // 顯示所支援的聲音的類型
    int y = 0;
    for (int i = 0; i < contentTypes.length; i++) {
      // 顯示類型
      g.drawString(contentTypes[i], 0, y, Graphics.TOP | Graphics.LEFT);
      y += Font.getDefaultFont().getHeight();

      // 如果支援樂音產生器,播放樂音
      if (contentTypes[i] == "audio/x-tone-seq") {
        try {
          
          Manager.playTone(ToneControl.C4, 2000, 100);
        }
        catch(MediaException me) {
        }
      }
    }
  }
}

下面是MIDP2.0手機所支援的常見的音頻MIME類型:
audio/x-tone-seq  表示樂音和樂音序列;audio/x-wav表示聲波聲音;audio/midi表示midi音樂;audio/mpeg表示MP3音頻。

使用MIDP2.0 Media API的步驟:
(1)    使用Manager類獲得一個針對特定媒體類型的播放器。
(2)    使用Player介面在特定的播放器上播放媒體。
(3)    如果需要的話,使用Control介面來改變媒體的回放。

下面是一個播放樂音的例子:
byte tempo=50; // 設定聲音播放速度
      byte d=8; // 音調值

      byte C4=ToneControl.C4; //基準音調
      byte D4=(byte)(C4+2); //音調值
      byte E4=(byte)(C4+4);
      byte G4=(byte)(C4+7); 
      byte rest=ToneControl.SILENCE; //無聲

      byte[] mySequence=
      {
        ToneControl.VERSION,1,             //設定版本號碼,當前必須設為1
        ToneControl.TEMPO,tempo,            //設定聲音播放速度,值越大,播放越快
        ToneControl.SET_VOLUME,100,        //設定音量,值越大,音量越大
        ToneControl.BLOCK_START,0,        //預定義播放塊,當前塊號為0
        E4,d,D4,d,C4,d,E4,d,
        E4,d,E4,d,E4,d,rest,d,                //塊的內容
        ToneControl.BLOCK_END,0,         //塊定義結束符
        ToneControl.PLAY_BLOCK,0,         //播放當前塊號為0的塊,塊號必須提前定義
        D4,d,D4,d,D4,d,rest,d,                //不使用塊號方式播放的內容,必須位於塊定義後面
      };

      //建立播放器
      Player p=Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
      //準備播放資訊
      p.realize();
      //擷取音調控制
      ToneControl c=(ToneControl)p.getControl("ToneControl");
      //設定音調序列
c.setSequence(mySequence);
//設定播放資源,擷取裝置
      p.prefetch();
      //開始播放
      p.start();
    }
    catch(Exception e)
    {
    }

下面是一個播放音樂檔案的例子:
try
{
      //從資源中擷取聲音
      InputStream is=getClass().getResourceAsStream("/"+"Testsound.mid");
      //建立播放MIDI聲音的播放器
      Player player=Manager.createPlayer(is,"audio/midi");
      //擷取播放資訊
      player.realize();
      //擷取裝置
      player.prefetch();
      //開始播放聲音
      player.start();

      VolumeControl control=(VolumeControl)player.getControl("VolumeControl"); //獲得控制介面,此介面的獲得必須在擷取播放資訊或者擷取播放裝置後面,如果在它們前面,將會出現無法播放聲音的情況
      if(control!=null) //必須檢查是否為null,因為有些聲音格式可能不支援音量控制
      {
        control.setLevel(5); //設定音量層級為50
//control.setMute(true);                            //設定靜音
      }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.