📄 musiccanvas.java
字号:
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.VolumeControl;
public class MusicCanvas extends Canvas implements Runnable {
//要用到javax.microedition.lcdui.Canvas
private boolean running = false; /*线程是否在运行*/
private Player player = null; /* Player*/
// 要用到javax.microedition.media.Player
static final int VOLUME_LEVEL = 50; /*音量初始化为50*/
private int volumesetting = VOLUME_LEVEL; /*音量级别*/
private boolean volumemuted = false; /*是否静音播放了*/
private boolean pausestate = true;
protected void paint(Graphics g) { /* 负责绘制屏幕上的画面*/
// TODO Auto-generated method stub
}
public void start() {
running = true;
Thread t = new Thread(this);
t.start();
}
public void run() {
// TODO Auto-generated method stub
while (running) {
repaint(); // ......................
try {
Thread.sleep(100);// .................
} catch (InterruptedException ie) {
System.out.println("Thread exception");
}
}
}
public void close() {
running = false;
if (player != null) {
player.close(); /*关闭播放器*/
player = null;
pausestate = true;
}
}
public void pause() {
try {
if (player != null) {
// pause player
player.stop(); /*回到PREFETCHD状态*/
}
} catch (MediaException ex) {
ex.printStackTrace();
}
pausestate = true;
}
public void playsong() {
try {
// 创建player对象
if (player == null) {
InputStream in = getClass().getResourceAsStream("/ndxyq.mid");
// 指定文件类型
player = Manager.createPlayer(in, "audio/midi");
}
player.realize();
// 设置循环播放次数
player.setLoopCount(-1);
/**设置音量为50 ,音量控制必须在REALIZED,PREFETCHED和STATED状态之一才
可以获取和改变.*/
VolumeControl volume = (VolumeControl) player
.getControl("VolumeControl");
// 要用到javax.microedition.media.control.VolumeControl
volume.setLevel(VOLUME_LEVEL);
player.prefetch();
player.start();
} catch (IOException ioe) {
System.out.println("Media Exception!");
} catch (MediaException me) {
System.out.println("Media Exception!");
}
pausestate = false;
}
// 通过左右和4,6键控制音量大小,0键控制静音,2键控制暂停和播放
protected void keyPressed(int keycode) {
switch (Integer.parseInt(getKeyName(keycode))) {
// 利用getGameAction方法进行处理键盘代码,只能处理UP,DOWN,LEFT,RIGHT,FIRE
// switch (getGameAction(keycode)) {
case 4:
adjustvolume(-5, false);
break;
case 6:
adjustvolume(5, false);
break;
case 0:
adjustvolume(0, true);
break;
case 2:
if (pausestate == true) {
playsong();
} else if (pausestate == false) {
pause();
}
break;
case 5:
close();
break;
}
}
private void adjustvolume(int increment, boolean mute) {
if (player != null) {
VolumeControl volume = (VolumeControl) player
.getControl("VolumeControl");
if (volume != null) {
// 目前音量级别
volumesetting = volume.getLevel();
// 如果不是静音了
if (mute != true) {
// 调整音量
volumesetting += increment;
volumesetting = volume.setLevel(volumesetting);
} else {
volume.setMute(!volume.isMuted());
volumemuted = volume.isMuted();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -