MMAPI (JSR 135) 為 J2ME 提供統一多媒體存取介面。本文彙整常見場景完整程式碼範例,涵蓋單音、音樂播放、MIDI 控制、視訊播放、RMS/JAR 資源播放、多播放器同步、音序生成、語音錄製、攝影擷取,供開發者直接參考。
Manager.playTone(ToneControl.C4, 5000, 100); // 頻率、持續毫秒、音量
Player p = Manager.createPlayer("https://server/music.mp3");
p.setLoopCount(5);
p.start();
Player p = Manager.createPlayer("https://server/music.mp3");
p.realize();
VolumeControl vc = (VolumeControl)p.getControl("VolumeControl");
if (vc != null) vc.setLevel(100);
p.setMediaTime(5 * 1000000L); // 5 秒
p.prefetch();
p.start();
// PlayerListener 處理 END_OF_MEDIA 循環播放...
Player p = Manager.createPlayer("https://server/tune.mid");
p.realize();
TempoControl tc = (TempoControl)p.getControl("TempoControl");
tc.setTempo(120000); // 120 BPM
p.start();
Player p = Manager.createPlayer("https://server/movie.mpg");
p.realize();
VideoControl vc = (VideoControl)p.getControl("VideoControl");
if (vc != null) {
Form form = new Form("video");
form.append((Item)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null));
Display.getDisplay(midlet).setCurrent(form);
}
p.start();
byte[] data = rs.getRecord(recordID);
InputStream is = new ByteArrayInputStream(data);
Player p = Manager.createPlayer(is, "audio/X-wav");
p.start();
InputStream is = getClass().getResourceAsStream("audio.wav");
Player p = Manager.createPlayer(is, "audio/X-wav");
p.start();
Player p1 = Manager.createPlayer("https://server/tune.mid");
Player p2 = Manager.createPlayer("https://server/movie.mpg");
p1.realize(); p2.realize();
p2.setTimeBase(p1.getTimeBase()); // p2 同步 p1 時間基準
p1.prefetch(); p2.prefetch();
p1.start(); p2.start();
byte[] seq = {
ToneControl.VERSION, 1,
ToneControl.TEMPO, 30, // 120 BPM
ToneControl.BLOCK_START, 0,
ToneControl.C4, 8, ToneControl.C4+2, 8, ... // 音符、音長
ToneControl.BLOCK_END, 0,
ToneControl.PLAY_BLOCK, 0, ...
};
Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
p.realize();
ToneControl tc = (ToneControl)p.getControl("ToneControl");
tc.setSequence(seq);
p.start();
Player p = Manager.createPlayer("capture://audio");
p.realize();
RecordControl rc = (RecordControl)p.getControl("RecordControl");
rc.setRecordLocation("file:/tmp/audio.wav");
rc.startRecord();
p.start();
Thread.sleep(5000);
p.stop();
rc.stopRecord();
rc.commit();
Player p = Manager.createPlayer("capture://video");
p.realize();
VideoControl vc = (VideoControl)p.getControl("VideoControl");
if (vc != null) {
Form form = new Form("video");
form.append((Item)vc.initDisplayMode(VideoControl.USE_GUI_PRIMITIVE, null));
Display.getDisplay(midlet).setCurrent(form);
}
p.start();
// 拍照
byte[] png = vc.getSnapshot(null);
close()/deallocate() 釋放。