miércoles, 21 de julio de 2010

Sonido en java

Bueno vayamos a algo mas de level hagamos uso de archivos especificamente de archivos de sonido ahora ya sabemos que existe el winamp,media player,etc y otra gama de reproductores para escuchar musica y la pregunta es por que reinventar la rueda bueno personalmente me gusta aprender y se que uds tambien ahora sabran que colge mi propio reproductor de musica hecho en java bueno el codigo es algo mas complejo con lo que les traigo ahora pero por lo basico se comiensa.
Primero que todo veremos que tipo de archivos nos reproduce java nativamente es decir sin uso de ningun controlador o libreria extra.
Usamos la Clase Clip:
Tieneun método open() que admite un AudioInputStream para poder reproducirlo. Nuevamente, la clase AudioSystem con su método getAudioInputStream() nos permite obtener este AudioInputStream a partir de un File normal.

package sonido;
import java.io.File;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;import javax.sound.sampled.Clip;

/** * * @author Administrador */
public class Main {
public static void main(String[] args)
{ // Obtenemos los tipos
AudioFileFormat.Type[] Tipo_archivo_soportado = AudioSystem.getAudioFileTypes();
// y los sacamos por pantalla
for (AudioFileFormat.Type tipo : Tipo_archivo_soportado)
System.out.println(tipo.getExtension());
try {
// Se obtiene un Clip de sonido
Clip archivo_de_sonido = AudioSystem.getClip();
// Se carga con un fichero wav
archivo_de_sonido.open(AudioSystem.getAudioInputStream(new File("wav2.wav")));
// Comienza la reproducción
archivo_de_sonido.start();
// Espera mientras se esté reproduciendo.
//*El programa no debe terminar inmediatamente, puesto que si lo hace la reproducción se parará inmediatamente. Por ello, esperaremos hasta que termine. El método isRunning() de la clase Clip nos dice si todavía se está reproduciendo, así que haremos un bucle hasta que termine la reproducción */
while (archivo_de_sonido.isRunning())
Thread.sleep(1000);
// Se cierra el clip. Significa que acabo el archivo y tendremos que cerrarlo
archivo_de_sonido.close(); }
catch(Exception e)
{
System.out.println(e.getMessage());
//Retorna el mensaje de error
}
}}

Este fragmento de codigo te ayudara a reproducir un simple archivo en java.
Tal vez por que quisiste agregarlo en un proyecto o simplemente te gusta escuchar musica
Ahora que si pueden amplificarlo es claro lo pueden meter en un frame bajo un boton, con un JFileChooser para obtener la ruta para que no sea estatica.
Todo eso se lo dejo a su imaginacion

Algunos comandos:
archivo_de_sonido.loop(0); // Reproduce el fichero de sonido una vezarchivo_de_sonido.loop(1); // reproduce el fichero de sonido dos vecesarchivo_de_sonido.loop(n); // reproduce el fichero de sonido n+1 vecesarchivo_de_sonido.loop(Clip.LOOP_CONTINUOUSLY); // reproduce el fichero de sonido una y otra vez sin parar.