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

J2ME 聲音播放兼容性指南:Nokia S40/S60/Series 60 3rd 實機測試總結

     編輯:Java 相關知識

Nokia 早期機型對 MMAPI (JSR 135) 支援不一,需針對不同平台採用專有 API 或標準 javax.microedition.media.Player。本文匯總三大機型族群的播放代碼與工程配置技巧。

1. S40 (7210, 3300) / S60 1st/2nd (3650, 7650) — 無 MMAPI

使用 Nokia 專有 com.nokia.mid.sound.Sound,播放單音/和弦序列(十六進制字節陣列)。

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

void play() {
    if (sound != null) { sound.stop(); sound = null; }
    sound = new Sound(tone, Sound.FORMAT_TONE);
    sound.setGain(255); // 音量 0-255
    sound.play(1);      // 循環 1 次
}

獲取音序字節碼:MIDI → Nokia Audio Converter (Nokia Developers Suite) → 輸出字節陣列。

WTK 整合:將 Nokia SDK lib/class.zip 中 com/nokia/mid/sound/Sound.class 解壓置入專案 lib/,打包時從 JAR 刪除該包並修正 JAD MIDlet-Jar-Size。

2. Series 60 3rd (N7610 等) — 支援 MMAPI

標準 Manager.createPlayer(InputStream, "audio/midi") 播放 MIDI 文件(置於 res/)。

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

void playSound(String name) {
    try {
        if (player != null) { player.close(); player = null; }
        player = Manager.createPlayer(getClass().getResourceAsStream("/"+name), "audio/midi");
        player.addPlayerListener(this);
        player.setLoopCount(1);
        player.realize(); player.start();
    } catch (Exception e) { e.printStackTrace(); }
}

public void playerUpdate(Player p, String event, Object data) {
    if (PlayerListener.END_OF_MEDIA.equals(event)) { p.close(); }
    else if (PlayerListener.CLOSED.equals(event)) { player = null; }
}

3. 切換到後台時停止播放

MIDlet pauseApp() 呼叫 Canvas stopTone():

// Canvas
void stopTone() { if (sound != null) sound.stop(); }

// MIDlet
public void pauseApp() {
    if (canvas != null && soundEnabled) canvas.stopTone();
}

工程配置提醒

  • MMAPI 需在 WTK 專案屬性中勾選 Mobile Media API。
  • 真機測試不可或缺,模擬器音頻行為常與實機差異極大。
  • 音量控制:Sound.setGain() (0-255) vs Player.getVolumeControl()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved