熟练使用J2ME在实际开发中的可选包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)
{
}