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

J2ME 播放音效 Nokia 三機型實戰總結:S40/S60、7610、切換應用靜音處理

     編輯:J2ME

整理 Nokia 三大機型系列音效播放差異與實作代碼。

1. Nokia S40 (7210/3300) & S60 (3650/7650) - 不支援 MMAPI

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

void fun() {
    if (kSound != null) { kSound.stop(); kSound = null; }
    kSound = new Sound(dataKill, Sound.FORMAT_TONE);
    kSound.setGain(255);
    kSound.play(1);
}

資料製作:MIDI → Nokia Audio Converter → byte 陣列。
WTK 整合:從 Nokia SDK class.zip 提取 Sound.class 打包,發布前從 JAR 移除並修正 JAD size。

2. Nokia 7610 - 支援 MIDP 2.0 MMAPI

import javax.microedition.media.*;
Player player;

void playSound(String source) { // "kill.mid" 放在 res/
    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));
}
void updateEvent(Player p, String event, Object data) {
    if (event == PlayerListener.END_OF_MEDIA) p.close();
    else if (event == PlayerListener.CLOSED) player = null;
}

3. 應用切換到背景時音效持續播放問題


// Canvas 中新增
void stopTone() { if (kSound != null) kSound.stop(); }

// MIDlet 中
public void pauseApp() {
    if (myCanvas != null && soundOn == 1) myCanvas.stopTone();
}

構想階段,待實機驗證。

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