Startseite bisherige Projekte Tools/Snippets Bücherempfehlungen Publikationen Impressum Datenschutzerklärung

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;
    }
}
Impressum - Datenschutzerklärung