/* MidiPlayer.java
* ������Ѻ��Сͺ�����Ԫ� 322251 Programming In JAVA
* �� �.Ǫ����ظ ��������� twachi@kku.ac.th
* Created on 5 �.�. 2550
*/
package kku.cs.fgl;
import java.net.URL;
import java.util.Vector;
import jaco.mp3.player.MP3Player;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import org.newdawn.slick.Music;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.util.ResourceLoader;
/**
* @author Wachirawut Thamviset
* @KhonKaen University
*
*/
public class MusicPlayer {
private static String musicfile;
private static Sequencer sequencer;
private static boolean stopFlag;
private static String musicType = "";
private static MP3Player mp3;
private static Vector<URL> playList = new Vector<URL>();
static public void play(String filename) {
if (filename == null) return;
// ��Ҫ������������������� stop
if(musicfile!=null && !musicfile.equals(filename)) stop();
musicfile = filename;
int p = musicfile.lastIndexOf(".");
String ext = musicfile.toLowerCase().substring(p);
if (ext.equals(".mid") || ext.equals(".midi")) {
playMidi();
} else if(ext.equals(".mp3")){
playMp3();
}else{
playOpenALMusic();
}
stopFlag = false;
}
private static Music music = null;
private static void playOpenALMusic() {
try {
musicType = "openal";
if(music==null) music = new Music(musicfile,true);
music.loop();
} catch (SlickException e) {
e.printStackTrace();
}
}
static private void playMidi() {
try {
if (sequencer == null)
sequencer = MidiSystem.getSequencer();
musicType = "midi";
if(sequencer.isOpen()){
sequencer.start();
}else{
Sequence mySeq = MidiSystem.getSequence(ResourceLoader
.getResource(musicfile));
sequencer.open();
sequencer.setSequence(mySeq);
sequencer.start();
sequencer.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
}
} catch (Exception e) {
}
}
/**
*
*/
static private void playMp3() {
try {
musicType = "mp3";
mp3 = new MP3Player(ResourceLoader.getResource(musicfile));
mp3.setRepeat(true);
mp3.play();
} catch (Exception e) {
System.out.println("Can not play \"" + musicfile + "\".");
e.printStackTrace();
}
}
static public void stop() {
stopFlag = true;
if (mp3!=null) mp3.stop();
mp3=null;
if (music != null) music.stop();
music=null;
if (musicType.equals("midi")) {
if (sequencer == null)
return;
if (sequencer.isRunning())
sequencer.stop();
if (sequencer.isOpen())
sequencer.close();
}
}
static public void addToPlaylist(String ... musicfiles){
for(int i=0;i<musicfiles.length;i++){
URL url = ResourceLoader.getResource(musicfiles[i]);
if(url!=null){
playList.add(url);
}
}
}
}