首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 遊戲開發:MIDP 2.0 Media API 音樂播放完整指南

     編輯:J2ME

為遊戲注入聲音:從 Tone 序列到 MIDI/MP3 播放

畫面再精美,沒有音效與背景音樂的遊戲總覺得缺了靈魂。J2ME 通過 Mobile Media API (MMAPI) 提供音頻支持,MIDP 2.0 更定義了輕量級的 javax.microedition.media 包,專為受限設備設計。本文詳細講解核心架構、支持格式檢測、播放流程與完整代碼範例。

核心架構三大件

  • Manager:媒體管理器,負責創建 Player、查詢設備能力(支持格式、協議)。
  • Player:播放器介面,控制媒體播放、停止、循環、資源預取。
  • Control:控制器介面,提供特定媒體類型的進階控制(如 VolumeControl 音量、ToneControl 樂音序列)。

檢測手機支持的音頻格式

不同手機支持格式差異極大,發布前務必動態檢測:

String[] types = Manager.getSupportedContentTypes(null);
for (String type : types) {
    // 顯示支持的 MIME 類型
    if ("audio/x-tone-seq".equals(type)) {
        // 支持 Tone 序列,可播放簡單旋律
        Manager.playTone(ToneControl.C4, 2000, 100);
    }
}

常見 MIDP 2.0 手機支持的 MIME 類型:

MIME 類型說明
audio/x-tone-seqTone 序列(單音/旋律)
audio/x-wavWAV 波形音頻
audio/midiMIDI 音樂
audio/mpegMP3 音頻

標準播放流程三步走

  1. Manager.createPlayer() 獲取 Player 實例
  2. player.realize() → player.prefetch() 準備資源
  3. player.start() 開始播放

範例 1:播放 Tone 旋律(無需音頻文件)

byte[] sequence = {
    ToneControl.VERSION, 1,
    ToneControl.TEMPO, 50,           // 速度
    ToneControl.SET_VOLUME, 100,     // 音量
    ToneControl.BLOCK_START, 0,      // 定義塊 0
    ToneControl.C4, 8, ToneControl.D4, 8, ToneControl.E4, 8, // 內容
    ToneControl.BLOCK_END, 0,
    ToneControl.PLAY_BLOCK, 0        // 播放塊 0
};

Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
p.realize();
ToneControl tc = (ToneControl) p.getControl("ToneControl");
tc.setSequence(sequence);
p.prefetch();
p.start();

範例 2:播放 MIDI/MP3 資源文件

InputStream is = getClass().getResourceAsStream("/bgm.mid");
Player player = Manager.createPlayer(is, "audio/midi");
player.realize();
player.prefetch();

// 音量控制(需在 realize/prefetch 後獲取)
VolumeControl vc = (VolumeControl) player.getControl("VolumeControl");
if (vc != null) vc.setLevel(50); // 0-100

player.start();

關鍵提醒:VolumeControl 必須在 realize() 或 prefetch() 之後獲取,否則部分手機會靜音或拋出異常。且並非所有格式都支持音量控制,務必做 null 判斷。

最佳實踐建議

  • 背景音樂優先用 MIDI(體積小、循環自然),音效用 WAV/Tone。
  • 遊戲暫停/切後台時調用 player.stop() 釋放資源,恢復時 prefetch() + start()。
  • 捕獲 MediaException 與 IOException,優雅降級(如無聲運行)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved