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.
0 comments:
Publicar un comentario