了解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开发应用程序。
分享到:
相关推荐
使用J2ME MMAPI开发移动多媒体应用技术.doc
j2me多媒体j2me多媒体j2me多媒体j2me多媒体j2me多媒体
J2ME学习资料打包下载(j2me游戏开发.rar,J2ME中文教程.rar...)
java基于j2me加密解密包
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
三款索尼爱立信的手机设备定义(J2ME无线开发包专用)
J2ME 学习资源包 J2ME电子书 移动开发
最新版的J2ME混淆打包工具,具体使用方法网上到处都是,用于对J2ME程序进行混淆打包
J2ME中用MMAPI开发手机摄像头程序,真的值得一看的哟,不看浪费。
J2ME 学习资源包 J2ME电子书 移动开发
J2ME 入门学习书籍打包下载J2ME 入门学习书籍打包下载J2ME 入门学习书籍打包下载
用J2ME编写的小游戏,整个资源包,有声音的,可直接运行
J2ME API J2ME API J2ME API J2ME API J2ME API
J2ME无线开发工具包(共2个分卷).part1
J2ME无线开发工具包(共2个分卷).part2
用于J2ME下的JSON包。 使用非常简单。来自json.org的链接
MIDP2.0的GAME游戏开发包在J2ME游戏开发中经常被用到,很多新手朋友可能搞不懂如何使用这个包,通过这个实例的学习你可能会知道很多!
基于j2me的图片特效(缩放,裁剪,调整大小,镜像,对比度亮度调整,黑白,线条,粉笔画)
J2ME 无线开发包 javax.wrieless.messaging 帮助文档 J2ME 无线开发包 javax.wrieless.messaging 帮助文档 J2ME 无线开发包 javax.wrieless.messaging 帮助文档
描述J2ME系统信息的获取,例如手机串号。手机支持哪些可选包等。