📄 musicplayer.java
字号:
package com.thinkenjoy.control;
import java.io.InputStream;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.VolumeControl;
/**
*
* 控制音乐播放的类
*/
class MusicPlayer {
private static MusicPlayer instance;
private static final String MIDI_FILE[] = { "game1", "game2", "game3" };
public Player playerArray[];
public boolean hasbeenLoaded[];
public Player currentPlayer;
private volatile boolean isPaused;
public int currentChannelId = -1;
private MusicPlayer() {
initial();
Control.loadMusicSetting();
}
/**
* 初始化每个MIDI音乐,每种音乐占用一个声道
*
*/
public static MusicPlayer getinstance() {
if (instance == null) {
instance = new MusicPlayer();
}
return instance;
}
/**
* 初始化
*
*/
public final void initial() {
playerArray = new Player[MIDI_FILE.length];
hasbeenLoaded = new boolean[MIDI_FILE.length];
for (int channelId = 0; channelId < MIDI_FILE.length; channelId++) {
loadMidi(channelId);
}
}
/**
* 载入某个声道的MIDI音乐
*
* @param channelId
*/
public final void loadMidi(int channelId) {
try {
hasbeenLoaded[channelId] = false;
InputStream inputstream = getClass().getResourceAsStream(
"/sound/" + MIDI_FILE[channelId] + ".mid");
playerArray[channelId] = Manager.createPlayer(inputstream,
"audio/midi");
playerArray[channelId].realize();
hasbeenLoaded[channelId] = true;
} catch (Exception ex) {
System.out.println("加裁声音资源出错!");
}
}
/**
* 按照相应的循环模式播放某个声道音乐
*
* @param channelId
* 声道
* @param loop
* 循环模式
*/
public synchronized void play(int channelId, int loop) {
try {
if (!hasbeenLoaded[channelId])
return;
if (currentPlayer != null && currentChannelId == channelId
&& currentPlayer.getState() == Player.STARTED) {
return;
}
if (currentChannelId != channelId) {
stop();
}
currentPlayer = playerArray[channelId];
currentPlayer.setLoopCount(loop);
setVolume(Control.musicVolumn);
currentPlayer.start();
currentChannelId = channelId;
} catch (Exception _ex) {
System.out.println("播放声音出错!");
}
}
/**
* 停止当前播放的声音
*
*/
public synchronized void stop() {
try {
if (currentPlayer != null) {
currentPlayer.stop();
currentPlayer.deallocate();
currentPlayer = null;
}
} catch (Exception ex) {
System.out.println("停止当前播放的声音时出错!");
}
}
/**
* 获取声道的数量
*
* @return
*/
public int getInstrumentNumber() {
return MIDI_FILE.length;
}
/**
* 设置声音的大小
*
* @param level
*/
public void setVolume(int level) {
if (currentPlayer != null) {
((VolumeControl) currentPlayer.getControl("VolumeControl"))
.setLevel(level);
Control.musicVolumn = level;
}
}
/**
* 获得相应声道声音的大小
*
* @return
*/
public int getVolume() {
return Control.musicVolumn;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -