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

📄 mixcanvas.java

📁 一组 MIDlet
💻 JAVA
字号:
/* * @(#)MixCanvas.java	1.10 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.media.*;import javax.microedition.media.control.*;public class MixCanvas extends Canvas implements CommandListener, Runnable {    private static final String TITLE_TEXT = "audio player";    private static final int[]  notes = {69, 70,71,72,73,74, 75, 76};    static Player  wavPlayer = null, tonePlayer = null;    static Image logo = null;    private int idx = 0, ip =0;    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, 1);    private Command     toneCommand       = new Command("Tone",						Command.ITEM, 1);        private Alert alert;    public MixCanvas(Display parentDisplay) {        super();	this.idx = 0;	this.parentDisplay = parentDisplay;	initialize();    }    void initialize() {        addCommand(backCommand);        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");		alert = new Alert("Warning", "Can not create player", null, null);	alert.setTimeout(1000);    }    /*     * Respond to commands, including back     */    public void commandAction(Command c, Displayable s) {        if (s == this) {            if (c == backCommand) {                stopSound();                parentDisplay.setCurrent(MixTest.getList());	    } else if ( c == toneCommand ) {		try {		    Manager.playTone(notes[ip], 1000, 100);		    ip++;		    if ( ip >= 8 )			ip = 0;		} catch (Exception ex) {		    System.out.println("get an exception for tone");		}            } else if (c == playCommand) {                playSound();            } else if (c == pauseCommand) {                pauseSound();	    }        }    }    public void setIndex(int idx) {	this.idx = idx;    }    private void createWavPlayer() {	// method createWavPlayer() 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.	new Thread(this).start();    }     public void run() {	try {	    if (wavPlayer == null) {		wavPlayer = Manager.createPlayer(MixTest.wavUrl);		wavPlayer.setLoopCount(-1);	    }	    wavPlayer.start();	} catch (Exception ex) {	    // ex.printStackTrace();	    if (wavPlayer != null) {		wavPlayer.close();		wavPlayer = null;	    }	    parentDisplay.setCurrent(alert);	}    }    private void createTonePlayer() {	byte d = 8; 	byte C4 = ToneControl.C4;	byte D4 = ToneControl.C4 + 2; // a whole step 	byte E4 = ToneControl.C4 + 4; // a major third	byte G4 = ToneControl.C4 + 7; // a fifth	byte rest = ToneControl.SILENCE; // eighth-note rest		    	byte[] mySequence = new byte[] {		ToneControl.VERSION, 1,		ToneControl.TEMPO, 30,		ToneControl.BLOCK_START, 0,		E4,d,D4,d,C4,d,D4,d,E4,d,E4,d,E4,d,rest,d, 		ToneControl.BLOCK_END,0,		ToneControl.PLAY_BLOCK,0,		D4,d,D4,d,D4,d,rest,d,E4,d,G4,d,G4,d,rest,d,//play "B" section 		ToneControl.PLAY_BLOCK,0, // content of "A" section 		D4,d,D4,d,E4,d,D4,d,C4,d,rest,d// play "C" section 	};		try {	    if ( tonePlayer == null) {		tonePlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);		tonePlayer.setLoopCount(-1);		tonePlayer.realize();		ToneControl tc = (ToneControl)tonePlayer.getControl("javax.microedition.media.control.ToneControl");		tc.setSequence(mySequence);	    }	    tonePlayer.start();	} catch (Exception ex) {	    // ex.printStackTrace();	    if (tonePlayer != null) {		tonePlayer.close();		tonePlayer = null;	    }	    parentDisplay.setCurrent(alert);	}    }    public void playSound() {	switch(idx) {	case 0: // wave + tone	    addCommand(toneCommand);	    createWavPlayer();	    break;	    	case 1: // toneseq + tone	    addCommand(toneCommand);	    createTonePlayer();	    break;	case 2: 	    removeCommand(playCommand);	    addCommand(pauseCommand);	    createWavPlayer();	    createTonePlayer();	    break;	}    }    public void stopSound() {	if (tonePlayer != null) {	    tonePlayer.close();	    tonePlayer = null;	}	if (wavPlayer != null) {	    wavPlayer.close();	    wavPlayer = null;	}		switch(idx) {	case 0:	case 1:	    removeCommand(toneCommand);	    break;	case 2:	    removeCommand(pauseCommand);	    removeCommand(playCommand);	    break;	}    }        public void pauseSound() {	removeCommand(pauseCommand);	addCommand(playCommand);	try {	    if ( wavPlayer != null) 		wavPlayer.stop();	    if ( tonePlayer != null )		tonePlayer.stop();	} catch (MediaException e) {	    // Nothing much to do here.	}    }        public void paint(Graphics g) {	int w = getWidth();	int h = getHeight();	String cname = "";	switch(idx) {	case 0:	    cname = "test-wav.wav";	    break;	case 1:	    cname = "tone seq";	    break;	case 2:	    cname = "wave+toneseq";	    break;	}	g.setColor(0);	g.fillRect(0, 0, w, h);	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("audio player!", w/2, 64, Graphics.TOP | Graphics.HCENTER);	g.drawString(cname, 0, 84, Graphics.TOP | Graphics.LEFT);    }    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 ( wavPlayer != null) {	    vc = (VolumeControl) wavPlayer.getControl("VolumeControl");	    if (vc != null) {		int cv = vc.getLevel();		cv += diff;		cv = vc.setLevel(cv);	    }	}	if ( tonePlayer != null) {	    vc = (VolumeControl) tonePlayer.getControl("VolumeControl");	    if (vc != null) {		int cv = vc.getLevel();		cv += diff;		cv = vc.setLevel(cv);	    }	}    }}

⌨️ 快捷键说明

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