Está en la página 1de 7

Reproductor MP3 en java

JAN29 Post Info


Mouse en 07:37 39 comentarios Permalink

Posteando de tiempo, se me ocurrio compartir el codigo de un simple reproductor mp3 hecho en java con la API de Java Media Framework. El codigo qu presento a continuacion sirve como base para el desarrollo de proyectos mucho mas ambiciosos, pero claro todo depende de las ganas que le pongas al programar, todo esta en tus manos, yo te digo como comenzar pero tu decides como terminar. El proyecto. Necesitas:

Java, obvio no :D un IDE, yo utilizo Netbeans 6.0 el API de Java Media Framework 15 minutos de tu tiempo

Creando la Interfaz 1. Crea un nuevo proyecto en Netbeans y aade un JFrame: reproductor, a este jframe aade un Menu, un JSlider , dos jButton y un label en la parte inferior, trata de que te quede como en la imagen de abajo

El reproductor 2. Crea una nueva clase y llamala mp3.java, esta clase es la encargada de trabajar con los archivos MP3. El codigo necesario esta aqui:
import java.io.IOException; import java.net.URL; import javax.media.CannotRealizeException; import javax.media.Manager; import javax.media.NoPlayerException; import javax.media.Player; import java.util.Timer; import javax.swing.*; import java.awt.*; import java.util.TimerTask; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.filechooser.FileNameExtensionFilter; /** * @web http://jc-mouse.blogspot.com/ * @author Mouse */ public class mp3{ //el player private Player mediaPlayer; //animacion private Timer tiempo ; private TimerTask task; private int speed = 1000;//velocidad private int frame=0; //control boolean run = false; boolean todo_ok = false; //archivo URL mediaURL=null; String file=""; //otros String t=null; //filtro private static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo MP3","mp3","mp3"); //el constructor vacio public mp3() {} /* controles de reproduccion */ public String STOP(){ //comprueba que el reproductor tenga un archivo if (todo_ok){ mediaPlayer.stop(); this.todo_ok=false; this.run=false; this.file=""; this.stopAnimation(); }

return "Reproductor mp3 - by Mouse"; } /* Reproduce un archivo mp3, si no encuentra ninguno devuelve un string vacio */ public String PLAY(JSlider b){ t ="No existe ningun archivo..."; if (todo_ok){ if(!run){//si ya se esta reproduciendo mediaPlayer.start(); this.run=true; t="Reproduciendo"; this.startAnimation(b); } } return t; } //para la animacion public void startAnimation(final JSlider b) { if (todo_ok) { tiempo = new Timer(); task = new TimerTask() { public void run() { //calculamos el tiempo de la animacion por 100% frame = (int) Math.round((mediaPlayer.getMediaTime().getSeconds() * 100)/mediaPlayer.getDuration().getSeconds()); //cuando ambos sean iguales quiere decir que el video a alcanzado el final de la reproduccion if(mediaPlayer.getMediaTime().getSeconds() == mediaPlayer.getDuration().getSeconds()){ frame=100; // 100% STOP();//SE DETIENE Y DESTRUYE EL MEDIA PLAYER } else // sino { // se actualiza el nuevo valor del Slider b.setValue(frame); //Porcentaja de reproduccion System.out.println("Tiempo de reproduccion: " + frame + "% de 100%"); } } }; //se inicia la animacion tiempo.schedule(task,0,speed); } } //detiene la animacion public void stopAnimation() { tiempo.cancel(); task.cancel(); }

/* Metod que muestra una ventana de dialgo para aadir "archivos" al reproductor * hace uso del metodo anterior "setvideo" */ public String Abrir_mp3(){ JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(filter); int result = fileChooser.showOpenDialog(null); if ( result == JFileChooser.APPROVE_OPTION ){ try { //si se esta reproduciendo un mp3, se detiene if(todo_ok){this.STOP();} //se asigna a mediaURL el archivo de video seleccionado URL url = fileChooser.getSelectedFile().toURL(); //se coloca el nombre de la cancion en la variable file this.file= fileChooser.getSelectedFile().getName(); //se asigna el mp3 al reproductor mediaPlayer = Manager.createRealizedPlayer( url ); //se coloca a true this.todo_ok=true; } catch (NoPlayerException ex) { Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex); } catch (CannotRealizeException ex) { Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(mp3.class.getName()).log(Level.SEVERE, null, ex); } } return "Reproductor mp3 - " + this.file; } }

Explicacion: Como se ve en el codigo, este reproductor tiene los controles basicos para reproducir PLAY y detener STOP el archivo mp3, ademas unos metodos para animar el jSlider y asi ver el avance en la reproduccion, el metodo Abrir_mp3(); te presenta una ventana de dialogo para que puedas buscar tu archivo MP3 y reproducirlo, todo esto desde una interfaz grafica. El codigo esta bastante comentado. 3. Ahora para implementar este codigo en la interfaz, debes hacer lo siguiente: Creas una instancia a nuestra clase mp3.java y aades los metodos a sus controles correspondientes.
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { //abrir mp3 this.setTitle(mimp3.Abrir_mp3()); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { //dale play jLabel1.setText(mimp3.PLAY(jSlider1)); }

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { //detener this.setTitle(mimp3.STOP()); jLabel1.setText("Detenido"); } // instancia a la clase mp3.java mp3 mimp3 = new mp3();

Y eso es todo, aqui puedes ver el reproductor funcionando

Aqui el video para una mejor explicacion esta es la base para reproductores mas trabajados, como por ejemplo mi version personal del reproductor winamp, aun en desarrollo, pero cuando lo termine lo subire para compartirlo con todos

No puede faltar el codigo fuente del proyecto en netbeans 6.0

Alguna duda, no dudes en preguntar, pero recuerda que puedo aconsejarte pero no realizar todo el trabajo por ti, como dijo el profe Escalante, solo HAY QUE TENER GANAS

martes, 22 de febrero de 2011

Reproducir un archivo MP3 en Java usando JLayer

Puede que queramos aadir msica o algn tipo de efecto sonoro a alguna aplicacin que estemos programando. Hoy explicar como reproducir un archivo MP3 desde Java. Para ello vamos a utilizar la librera JLayer, que es capaz de decodificar, convertir y reproducir archivos MP3 en tiempo real. Esta librera se puede encontrar en http://www.javazoom.net/javalayer/sources.html . Debemos descargar y descomprimir el archivo comprimido (zip o tar.gz) para obtener el archivo jl1.0.jar (podemos descargarnos alguna versin ms moderna si existiese), que es el que nos interesa. Hay que incluir ese archivo jar en nuestro proyecto: si utilizamos el IDE Eclipse lo haremos pinchando con el botn derecho sobre la carpeta del proyecto; pinchamos en Propiedades; opcin "Java Build Path"; pestaa Libreras; finalmente pulsamos en "Add External JAR" y seleccionamos el archivo jl1.0.jar . A nosotros nos interesa el paquete "player", que es el que se encarga de la reproduccin (podemos encontrar la documentacin de su API aqu). Concretamente utilizaremos la clase "Player" (documentacin aqu).

El cdigo

A continuacin muestro una aplicacin muy simple en el que se reproduce un archivo MP3 que se encuentra en mi disco duro (tambin se pueden reproducir archivos MP3 alojados en la web). Lo importante es la lnea de cdigo en la que se llama al constructor de la clase Player (con un objeto FileInputStream como argumento) y la lnea en la que se llama al mtodo "play" del objeto Player.

import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.player.Player; public class Principal { public static void main(String[] args) { try { FileInputStream fis; Player player; fis = new FileInputStream( "D:\\Users\\Public\\Music\\Sample Music\\Sleep Away.mp3"); BufferedInputStream bis = new BufferedInputStream(fis); player = new Player(bis); // Llamada a constructor de la clase Player player.play(); // Llamada al mtodo play } catch (JavaLayerException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }