📄 music.java
字号:
import javax.sound.midi.*;
import java.io.*;
import java.net.*;
import java.applet.*;
public class Music implements MetaEventListener, Runnable
{ AudioClip clip=null;
//String midiFile = "(int)(Math.random()*6+1)"+".mid";
String midiFile;
Sequence sequence = null;
Sequencer sequencer;
boolean isPlaying = false;
volatile Thread thread;
public Music()
{
int index=(int)(Math.random()*14+1);
switch(index)
{
case 1:
midiFile="Music/a1.mid";
break;
case 2:
midiFile="Music/a2.mid";
break;
case 3:
midiFile="Music/a3.mid";
break;
case 4:
midiFile="Music/a4.mid";
break;
case 5:
midiFile="Music/a5.mid";
break;
case 6:
midiFile="Music/a6.mid";
break;
case 7:
midiFile="Music/a7.mid";
break;
case 8:
midiFile="Music/a8.mid";
break;
case 9:
midiFile="Music/a9.mid";
break;
case 10:
midiFile="Music/a10.mid";
break;
case 11:
midiFile="Music/a11.mid";
break;
case 12:
midiFile="Music/a12.mid";
break;
case 13:
midiFile="Music/a13.mid";
break;
case 14:
midiFile="Music/a14.mid";
break;
}
try
{
loadMidi(midiFile);
}
catch (InvalidMidiDataException ex) {
}
catch (IOException ex) {
}
}
public void loadMidi(String filename) throws IOException,
InvalidMidiDataException
{
URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();
URL url = urlLoader.findResource(filename);
sequence = MidiSystem.getSequence(url);
}
public void playNew()
{
//File file=new File(".\\Music","a9.mid");
File file=new File(midiFile);
try{
clip=java.applet.Applet.newAudioClip(file.toURL());
}
catch(Exception eee) {}
clip.play();
}
public void stopMusic()
{ if(clip!=null)
clip.stop();
}
public void play()
{
if (isPlaying) { //如果已经在播放,返回
return;
}
try {
// Create a sequencer for the sequence
sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(sequence);
sequencer.addMetaEventListener(this);
}
catch (InvalidMidiDataException ex) {
}
catch (MidiUnavailableException e) {
}
// Start playing
thread = new Thread(this);
thread.start();
}
public void stop()
{
if (isPlaying) {
sequencer.stop();
sequencer.stopRecording();
isPlaying = false;
}
if (thread != null) {
thread = null;
}
}
public void run() {
Thread currentThread = Thread.currentThread();
while (currentThread == thread && !isPlaying) {
sequencer.start();
isPlaying = true;
try {
thread.sleep(1000l);
}
catch (InterruptedException ex) {
}
}
}
public void meta(MetaMessage event) {
if (event.getType() == 47) {
System.out.println("Sequencer is done playing.");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -