Reproducir sonido en segundo plano usando hilos en java


Es posible que necesiten reproducir algún sonido en alguna de sus aplicaciones. Hace poco estaba desarrollando un juego en java, y necesitaba reproducir sonidos. Una manera de hacer es la siguiente.
Por ahora no tiene los métodos de pausar, parar, etc.
Será necesario crear una clase que se llama ReproducirSonidos y la otra llamada PruebasSonidos que es la clase principal.

Nota: Dentro de la carpeta del proyecto, es necesario crear una carpeta llamada sonidos y almacenen ahí los sonidos que usen en su proyecto.



/*
 * Nombre de la clase: ReproducirSonidos
 * Descripción: Controla el sonido que se esté reproduciendo, utilizando un hilo
 *              sin opciones de pausea, stop o reanudar, simplemente lo ejecuta
                y comienza la reproducción de la canción, y espera hasta que finalice.
 */
package pruebassonidos;

import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

/**
 *
 * @author gsu Jesús Fernando Merino Merino
 */
public class ReproducirSonidos extends Thread{
    String mensaje;
    String sonido;
    int timeRep=0;
    boolean stop=false;
    public ReproducirSonidos(){
        mensaje="Hola";
    }
    public ReproducirSonidos(String sonido){
        this.sonido=sonido;
    }
    public ReproducirSonidos(String sonido,boolean stop){
        this.sonido=sonido;
        stop=false;
    }
    public void run(){
        repSonido(sonido);
        System.out.println("Este proceso ha terminado:"+this.getName());
    }

    public void setMensaje(String msj){
        this.mensaje = msj;
    }
    
    public void repSonido(String sonido){
        SourceDataLine soundLine = null;
        int BUFFER_SIZE = 64*1024;  // 64 KB
        // Set up an audio input stream piped from the sound file.
        try {
           File soundFile = new File(sonido);
           AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
           AudioFormat audioFormat = audioInputStream.getFormat();
           DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
           soundLine = (SourceDataLine) AudioSystem.getLine(info);
           soundLine.open(audioFormat);
           soundLine.start();
           int nBytesRead = 0;
           byte[] sampledData = new byte[BUFFER_SIZE];
           while (nBytesRead != -1) {
              nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length);
              if (nBytesRead >= 0) {
                 // Writes audio data to the mixer via this source data line.
                 soundLine.write(sampledData, 0, nBytesRead);
              }
           }
        } catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
            System.err.println("Error: "+ex.getMessage());
        } finally {
           soundLine.drain();
           soundLine.close();
        }
    }
}

Clase principal del proyecto...
/*
 * Clase: PruebaSonidos
 * Descripción: Programa que reproduce una cación en segundo plano, usando hilos.
 */
package pruebassonidos;


/**
 *
 * @author gXfer Jesus Fernando Merino Merino
 */
public class PruebasSonidos {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ReproducirSonidos reproducir = new ReproducirSonidos("sonidos/ajws.au");
        reproducir.start();
        System.out.println("Después de la canción");
    }
}

Pueden descargar el proyecto aquí. Gracias por visitar, si tienen dudas comenten por favor.

Comentarios:

@