熟练使用J2ME可选包MMAPI
2007-12-23 12:34:13 来源:WEB开发网核心提示: 了解J2ME可选包MMAPI一文向读者介绍了MMAPI的基本知识,掌握MMAPI的灵活性应该是重点,熟练使用J2ME可选包MMAPI,本文将讲述如何在实际开发中使用MMAPI, 本文的目的是为读者提供处理不同情况的代码,您可以参考MMAPI DOC,播放单音try { Manager.playTone(Tone
了解J2ME可选包MMAPI一文向读者介绍了MMAPI的基本知识,掌握MMAPI的灵活性应该是重点。本文将讲述如何在实际开发中使用MMAPI。
本文的目的是为读者提供处理不同情况的代码,您可以参考MMAPI DOC。
- 播放单音
try {
Manager.playTone(ToneControl.C4, 5000 /* millisec */, 100 /* max vol */);
} catch (MediaException e) { }
- 简单媒体重放功能实现
try {
Player p = Manager.createPlayer("http://webserver/music.mp3");
p.setLoopCount(5);
p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }
- 详细重放控制
static final long SECS_TO_MICROSECS = 1000000L;
Player p;
VolumeControl vc;
try {
p = Manager.createPlayer("http://webserver/music.mp3");
p.realize();
// Set a listener.
p.addPlayerListener(new Listener());
// Grab volume control for the player.
// Set Volume to max.
vc = (VolumeControl)p.getControl("VolumeControl");
if (vc != null)
vc.setLevel(100);
// Set a start time.
p.setMediaTime(5 * SECS_TO_MICROSECS);
// Guarantee that the player can start with the smallest latency.
p.PRefetch();
// Non-blocking start
p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }
class Listener implements PlayerListener {
public void playerUpdate(Player p, String event, Object eventData) {
if (event == END_OF_MEDIA event == STOP_AT_TIME) {
System.out.println("Done processing");
try {
p.setMediaTime(5 * SECS_TO_MICROSECS);
p.start();
} catch (MediaException me) { }
break;
}
}
}
- 实现MIDI重放控制
Player p; TempoControl tc; try { p = Manager.createPlayer("http://webserver/tune.mid"); p.realize(); // Grab the tempo control. tc = (TempoControl)p.getControl("TempoControl"); tc.setTempo(120000); // 120 beats/min p.start(); } catch (IOException ioe) { } catch (MediaException me) { }
- 视频重放功能实现
Player p;
VideoControl vc; try { p = Manager.createPlayer("http://webserver/movie.mpg"); p.realize(); // Grab the video control and set it to the current display. vc = (VideoControl)p.getControl("VideoControl"); if (vc != null) { Form form = new Form("video"); form.append((Item)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null)); Display.getDisplay(midlet).setCurrent(form); } p.start(); } catch (IOException ioe) { } catch (MediaException me) { } - 播放RMS内存储的数据
RecordStore rs; int recordID; : // code to set up the record store. try { InputStream is = new ByteArrayInputStream(rs.getRecord(recordID)); Player p = Manager.createPlayer(is, "audio/X-wav"); p.start(); } catch (IOException ioe) { } catch (MediaException me) { }
- 播放Jar文件中存储的媒体
/** Notice that in MIDP 2.0, the wav format is mandatory only */ /** in the case that the device supports sampled audio. */ try { InputStream is = getClass().getResourceAsStream("audio.wav"); Player p = Manager.createPlayer(is, "audio/X-wav"); p.start(); } catch (IOException ioe) { } catch (MediaException me) { }
- 不同Player的同步
Player p1, p2; try { p1 = Manager.createPlayer("http://webserver/tune.mid"); p1.realize(); p2 = Manager.createPlayer("http://webserver/movie.mpg"); p2.realize(); p2.setTimeBase(p1.getTimeBase()); p1.prefetch(); p2.prefetch(); p1.start(); p2.start(); } catch (IOException ioe) { } catch (MediaException me) { }
- 产生单音序列
byte tempo = 30; // set tempo to 120 bpm
byte d = 8; // eighth-note
byte C4 = ToneControl.C4;;
byte D4 = (byte)(C4 + 2); // a whole step
byte E4 = (byte)(C4 + 4); // a major third
byte G4 = (byte)(C4 + 7); // a fifth
byte rest = ToneControl.SILENCE; // rest
byte[] mySequence = {
ToneControl.VERSION, 1, // version 1
ToneControl.TEMPO, tempo, // set tempo
ToneControl.BLOCK_START, 0, // start define "A" section
E4,d, D4,d, C4,d, E4,d, // content of "A" section
E4,d, E4,d, E4,d, rest,d,
ToneControl.BLOCK_END, 0, // end define "A" section
ToneControl.PLAY_BLOCK, 0, // play "A" section
D4,d, D4,d, D4,d, rest,d, // play "B" section
E4,d, G4,d, G4,d, rest,d,
ToneControl.PLAY_BLOCK, 0, // repeat "A" section
D4,d, D4,d, E4,d, D4,d, C4,d // play "C" section
};
try{
Player p = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
p.realize();
ToneControl c = (ToneControl)p.getControl("ToneControl");
c.setSequence(mySequence);
p.start();
} catch (IOException ioe) {
} catch (MediaException me) { }
- 语音捕获和录音功能的实现
try { // Create a DataSource that captures live audio. Player p = Manager.createPlayer("capture://audio"); p.realize(); // Get the RecordControl, set the record location, and // start the Player and record for 5 seconds. RecordControl rc = (RecordControl)p.getControl("RecordControl"); rc.setRecordLocation("file:/tmp/audio.wav"); rc.startRecord(); p.start(); Thread.currentThread().sleep(5000); p.stop(); rc.stopRecord(); rc.commit(); } catch (IOException ioe) { } catch (MediaException me) { } catch (InterruptedException e) { }
实现摄像功能
Player p; VideoControl vc; // initialize camera try { p = Manager.createPlayer("capture://video"); p.realize(); // Grab the video control and set it to the current display. vc = (VideoControl)p.getControl("VideoControl"); if (vc != null) { Form form = new Form("video"); form.append((Item)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null)); Display.getDisplay(midlet).setCurrent(form); } p.start(); } catch (IOException ioe) { } catch (MediaException me) { } // now take a picture try { byte[] pngImage = vc.getSnapshot(null); // do something with the image ... } catch (MediaException me) { }
在后面的文章中我们将通过完整的实例演示如何使用MMAPI开发应用程序。
(出处:http://www.cncms.com)
更多精彩
赞助商链接