⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playercanvas.java

📁 一组 MIDlet
💻 JAVA
字号:
/* * @(#)PlayerCanvas.java	1.6 02/08/15 @(#) * * Copyright (c) 2004 Sun Microsystems, Inc.  All rights reserved. * Use is subject to license terms. */package example.audiodemo;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;import javax.microedition.media.*;import javax.microedition.media.control.*;import java.io.InputStream;import java.io.ByteArrayInputStream;/** * The component for AudioPlayer. * It will create a player for the selected url, play and display * some properties of the player. * * Use star key to increase the volume, pound key to decrease the volume * **/public class PlayerCanvas extends Canvas implements Runnable, CommandListener {    private Player player;    private Thread dThread;    private Image logo = null;    private Display parentDisplay;    private Command     backCommand       = new Command("Back", Command.BACK,                                                1);    private Command     playCommand       = new Command("Play",                                                Command.ITEM, 1);    private Command     pauseCommand       = new Command("Pause",                                                Command.ITEM, 10);    private boolean disMTime, interrupted;    private String title, url;    private String mtime;    public PlayerCanvas(Display parentDisplay) {        super();	this.parentDisplay = parentDisplay;	initialize();    }    private void initialize() {	this.addCommand(backCommand);	this.addCommand(pauseCommand);		setCommandListener(this);	try {	    logo = Image.createImage("/icons/logo.png");	} catch (Exception ex) {	    logo = null;	}	if ( logo == null) 	    System.out.println("can not load logo.png");	    }    public void commandAction(Command c, Displayable s) {        if (s == this) {            if (c == backCommand) {                stopSound();		removeCommand(playCommand);		addCommand(pauseCommand);                parentDisplay.setCurrent(AudioPlayer.getList());            } else if (c == playCommand) {                playSound();		removeCommand(playCommand);		addCommand(pauseCommand);            } else if (c == pauseCommand) {                pauseSound();		removeCommand(pauseCommand);		addCommand(playCommand);	    }        }    }    public void setParam(String url) {	this.url = url;	int idx = url.lastIndexOf('/');	title = url.substring(idx+1);    }    public void playSound() {	if (title == null || url == null)	    return;		if (dThread == null) {	    dThread = new Thread(this);	    mtime = "";	    disMTime = true;	    interrupted = false;	    dThread.start();	} else if (player != null) {	    try {		player.start();	    } catch (Exception ex){}	}    }    public void stopSound() {	try {	    interrupted = true;	    disMTime = false;	    dThread = null;	    	    Thread.sleep(100);	    	    	    if (player != null) {		player.close();		player = null;	    }	} catch (Exception ex) {}    }    void pauseSound() {	try {	    if (player != null)		player.stop();	} catch (MediaException ex){}    }	    void createPlayer() {	try {	    if (url.startsWith("http:")) {		player = Manager.createPlayer(url);	    } else if (url.startsWith("resource")) {		int idx = url.indexOf(':');		String loc = url.substring(idx+1);		InputStream is = getClass().getResourceAsStream(loc);		String ctype;		if (url.endsWith("wav")) {		    ctype = "audio/x-wav";		} else {		    ctype = "audio/x-tone-seq";		}		player = Manager.createPlayer(is, ctype);	    } else if (url.startsWith("rms:")) {		boolean found = false;		InputStream stream = null;		try {		    RecordStore rs = RecordStore.openRecordStore("adrms", false);		    byte[] adata = rs.getRecord(1);		    rs.closeRecordStore();		    stream = new ByteArrayInputStream(adata);		    found = true;		} catch (Exception ex) {		    found = false;		    createMyRecordStore();		}		if (!found) {		    RecordStore rs = RecordStore.openRecordStore("adrms", false);		    byte[] adata = rs.getRecord(1);		    rs.closeRecordStore();		    stream = new ByteArrayInputStream(adata);		}		String ctype;		if (url.endsWith("wav")) {		    ctype = "audio/x-wav";		} else {		    ctype = "audio/x-tone-seq";		}		player = Manager.createPlayer(stream, ctype);	    }			    player.setLoopCount(-1);	} catch (Exception ex) {	    if (player != null) {		player.close();		player = null;	    }	    Alert alert = new Alert("Warning", "Cannot create player", null, null);	    alert.setTimeout(1000);	    	    parentDisplay.setCurrent(alert);	}	    }    private void createMyRecordStore() {	try {	    int idx = url.indexOf(':');	    String loc = url.substring(idx+1);	    InputStream is = getClass().getResourceAsStream(loc);	    byte[] data = new byte[4096];	    int nread = 0, tmp;	    while ( (tmp = is.read(data, nread, 1024)) > 0 ) {		nread += tmp;	    }	    is.close();	    // create a RecordStore	    RecordStore rs = RecordStore.openRecordStore("adrms", true);	    //int id = rs.addRecord(data, 0, data.length);	    int id = rs.addRecord(data, 0, nread);	    rs.closeRecordStore();	    System.out.println("create a new record store");	} catch (Exception ex) {	    ex.printStackTrace();	}    }    public void paint(Graphics g) {	int w = getWidth();	int h = getHeight();	g.setColor(0);	g.fillRect(0, 0, w, h);	g.setColor(0xFF7f00);	g.drawString("Audio Player", w/2, 8, Graphics.TOP | Graphics.HCENTER);	if ( logo != null ) {	    g.drawImage(logo, w/2, 30, Graphics.TOP | Graphics.HCENTER);	}	g.setColor(0xFF7f00);	g.drawString("Audio Player", w/2, 8, Graphics.TOP | Graphics.HCENTER);	g.drawString(title, w/2, 84, Graphics.TOP | Graphics.HCENTER);	g.drawString(mtime, 0, 150, Graphics.TOP | Graphics.LEFT);    }    public void run() {	if (player == null) {	    try {		// method playSound() runs on GUI thread.		// Manager.createPlayer() will potentially invoke a blocking 		// I/O. This is not the good practice recommonded by MIDP 		// programming style. So here we will create the		// Player in a separate thread.		createPlayer();		player.realize();		long dur = player.getDuration();		if (dur != -1)		    title = title + " [" + timeFM(dur)+ "]";		player.start();	    } catch (Exception ex){}	}	while (!interrupted) {	    try {		if (disMTime) {		    mtime = timeFM(player.getMediaTime());		    repaint(0,110, 100, 170);		}		Thread.sleep(100);	    } catch (Exception ex){}	}    }    protected void keyPressed(int keycode) {	switch (keycode) {	case KEY_STAR:	    changeVolume(-10);	    break;	case KEY_POUND:	    changeVolume(10);	    break;	}    }    private void changeVolume(int diff) {	VolumeControl vc;	if ( player != null) {	    vc = (VolumeControl) player.getControl("VolumeControl");	    if (vc != null) {		int cv = vc.getLevel();		cv += diff;		cv = vc.setLevel(cv);	    }	}    }        private String timeFM(long val) {	String ret = "";	int mval = (int)(val/1000);	int sec = mval/1000;	int min = sec/60;	if (min >= 10)	    ret = ret + min + ":";	else if (min > 0)	    ret = "0" + min + ":";	else	    ret = "00:";	if (sec >= 10)	    ret = ret + sec + ".";	else if (sec > 0)	    ret = ret + "0" + sec + ".";	else	    ret = ret + "00.";	mval = (mval % 1000) / 100;	ret = ret + mval;	return (ret);    }	}	          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -