Play Sound FilesApril 2015
Play sound files in Java.
package sound;
import java.io.File;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineEvent.Type;
import javax.sound.sampled.LineListener;
import util.Log;
public class SoundPlayer {
private Queue<File> fileQueue = new ConcurrentLinkedQueue<File>();
private volatile boolean running;
private void playNextSound(){
File file = fileQueue.poll();
if (file == null){
queueFinished();
return;
}
try {
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
AudioFormat format = stream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(stream);
clip.start();
clip.addLineListener(new LineListener() {
@Override
public void update(LineEvent event) {
if (event.getType() == Type.STOP){
clip.close();
playNextSound();
}
}
});
}
catch (Throwable e) {
Log.warn(e); //whatever
}
}
public synchronized void addToPlaylist(File file){
fileQueue.offer(file);
if (!running){
startQueue();
}
}
private void startQueue() {
running = true;
playNextSound();
}
private synchronized void queueFinished(){
running = false;
}
}