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

📄 musiccanvas.java

📁 可以播放音乐,以及实现音乐播放的控制(包括控制音量,暂停等)
💻 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 + -