整理 Nokia 三大機型系列音效播放差異與實作代碼。
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。
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;
}
// Canvas 中新增
void stopTone() { if (kSound != null) kSound.stop(); }
// MIDlet 中
public void pauseApp() {
if (myCanvas != null && soundOn == 1) myCanvas.stopTone();
}
構想階段,待實機驗證。