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

J2ME 遊戲音效處理實戰:Nokia S40/S60、MIDP 2.0 MMAPI 與 V300 多平台適配

     編輯:J2ME

針對不同平台音效 API 差異,提供三套完整實作:Nokia 專有 Sound API、MIDP 2.0 MMAPI (Player)、MID 檔案播放。

1. Nokia S40/S60 (7210/3300/3650/7650) - 專有 Sound API

import com.nokia.mid.sound.*;
Sound soundPlayer;
byte[] dataKill = {0x02,0x4a,0x3a,0x40,0x04,0x00,0x0b,0x28,0x83,0x28,0x28,0xd2,0x28,0x00};

void playSound() {
    if (soundPlayer != null) { soundPlayer.stop(); soundPlayer = null; }
    soundPlayer = new Sound(dataKill, Sound.FORMAT_TONE);
    soundPlayer.setGain(255); // 音量
    soundPlayer.play(1);      // 播放一次
}

資料來源:MIDI → Nokia Audio Converter 轉換為 byte 陣列。
WTK 整合:從 Nokia SDK class.zip 提取 com.nokia.mid.sound.Sound 打包進專案,發布時從 JAR 移除並修正 JAD 大小。

2. Nokia 7610 - MIDP 2.0 MMAPI (Player)

import javax.microedition.media.*;
Player player;
void playSound(String source) { // source: "kill.mid"
    if (player != null) { player.close(); player = null; }
    player = Manager.createPlayer(getClass().getResourceAsStream("/"+source), "audio/midi");
    player.addPlayerListener(this);
    player.setLoopCount(1);
    player.realize();
    player.start();
}
public void playerUpdate(Player p, String event, Object data) {
    Display.getDisplay(midlet).callSerially(() -> updateEvent(p, event, data));
}
private void updateEvent(Player p, String event, Object data) {
    if (event == PlayerListener.END_OF_MEDIA) p.close();
    else if (event == PlayerListener.CLOSED) player = null;
}

切換應用處理:pauseApp() 中呼叫 stopTone() 停止播放。

3. Motorola V300 - MMAPI 播放 MID

Player player;
void initSound() {
    player = Manager.createPlayer(getStream("/sound/b_main.mid"), "audio/midi");
    player.realize();
    player.setLoopCount(100000); // 循環播放背景音樂
}
// 控制同 Nokia 7610,使用 PlayerListener

OTT 格式進階控制 (Nokia)

定義 EMSound 類別封裝資料與型別,實作 SoundListener 監控播放狀態,支援多音效快取、切換、停止、啟用/禁用控制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved