📄 playsound.java
字号:
/*
* @(#)ImageRevert.java 1.0 03/08/20
* Copyright 2003 Entao Zhang, All rights reserved.
*/
import java.applet.*;
import javax.sound.midi.*;
import java.net.*;
import java.awt.Component;
import javax.swing.JOptionPane;
/**
* midi播放线程类.使用线程循环播放.
*/
public class PlaySound implements Runnable{
private Thread t;
private Component parent;
private Sequence sequence;
private Sequencer player;
//程序运行的URL或本机路径.
private URL codeBase;
//支持运行URL下的个Midi文件(可修改),如果不存在则播放下一个.不影响使用.
private String[] sounds={"midi/01.mid","midi/02.mid","midi/03.mid",
"midi/04.mid","midi/05.mid","midi/06.mid",
"midi/07.mid","midi/08.mid"};
//当前播放文件索引.
private int index=0;
//是否在播放完自动循环.circle是否依次循环或单首文件循环.
private boolean loop=true,circle=true;
public PlaySound(Component parent,URL codeBase){
this.parent=parent;
this.codeBase=codeBase;
try{
player=MidiSystem.getSequencer();
}catch(MidiUnavailableException e){}
}
//选择播放曲目.
public void chooseSound(){
Object value=JOptionPane.showInputDialog(parent,"请选择背景音乐:",
"选择背景音乐",JOptionPane.QUESTION_MESSAGE, null,
sounds,sounds[index]);
if (value==null) return;
for (int i=0; i<sounds.length; i++){
if (((String)value).equals(sounds[i])){
loadAndPlay(i);
return;
}
}
}
//按给定的索引加载并播放曲目.
public void loadAndPlay(int index){
if (sounds==null || index<0 || index>(sounds.length-1)) return;
this.index=index;
//先关闭正在播放的曲目.
stop();
t=new Thread(this);
t.setPriority(Thread.MIN_PRIORITY);
t.start();
}
//保证线程安全性
synchronized public void run() {
try{
//加载曲目.
sequence=MidiSystem.getSequence(new URL(codeBase,sounds[index]));
player.open();
player.setSequence(sequence);
player.start();
//当曲目开始播放时设置自动循环
loop=true;
//等待播放结束.
while(player.isRunning()){
Thread.sleep(500);
}
}catch(Exception e){
//如果加载文件失败,则设置自动循环,并转向下一首.
loop=true;
}
player.close();
//进行循环.
if (loop){
if (circle){
loadAndPlay(index==(sounds.length-1)?0:index+1);
}else{
loadAndPlay(index);
}
}
}
//停止播放和循环运作.
public void stop(){
if (player.isRunning()){
loop=false;
player.stop();
}
}
//开始或重新开始播放.
public void start(){
if (sequence==null){
loadAndPlay(0);
}else loadAndPlay(index);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -