Ben++

The proposed Multimedia API specification provides a high-levelinterface to sound and multimedia capabilities of a device runningJ2ME. The target is to enable versatile multimedia functionality inJ2ME applications. The specification willl address the scalability of aMultimedia API for various devices. To focus the effort, care will begiven to ensure that this API will support basic sound functionality onconstrained memory devices, with the possibility of additionalfunctionality supported by more capable devices

播放单

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)
{
}


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=676838


[点击此处收藏本文]  发表于2005年12月30日 4:00 AM




正在读取评论……

发表评论

大名:
网址:
验证码
评论 
   

news



我的豆瓣
我的Flickr

订阅Rss到我的MixWeb个性化主页

New Posts

导航

blog stats

文章

收藏

相册

Friends

Other

存档


正在读取评论……