16/5/10

Reproductor MP3 en java


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 añade un JFrame: reproductor, a este jframe añade 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 añadir "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 añades 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
Click para descargar
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

43 comentarios:

  1. Hola de casualidad ya terninaste el reproductor que estabas haciendo me intereso per la interfaz los botonos y todo eso si me podrias explicar como hacerlo te lo agradeceria

    ResponderEliminar
  2. muy bueno tu post pero el link esta muerto.. haber si lo resubes,, y ese skin esta chido.. haber si posteas los skin. que usastes..

    ResponderEliminar
  3. Buen aporte ya lo habia intentado pero nunca pude darle la funcionalidad al JSlider que cuando cambie de posicion el disco
    se adelante o se atrase respectivamente quisiera saber si me puedes ayudar con ello.
    Tengo entendido que se puede realizar

    Player.setMediaTime(Time time)
    pero no se como manejar el evento

    ResponderEliminar
  4. Hola, muy bueno el aporte gracias.
    Yo tambien estoy interesado en el skin que usas y en la posibilidad de crear uno propio si pudieras guiarme en el proceso te lo agradeceria, gracias.

    ResponderEliminar
  5. que bueno que les gusto el skin, su creacion es bastante sencilla y lo colocare mas adelante. saludos

    ResponderEliminar
  6. hola amigo disculpa me salen error en esto
    import javax.media.CannotRealizeException;
    import javax.media.Manager;
    import javax.media.NoPlayerException;
    import javax.media.Player;
    no se por que, tambien aki private Player mediaPlayer;
    que puedo hacer audame gracias
    mi correo leoooncio@hotmail.com

    ResponderEliminar
  7. leoncio, te muestra un error es esa parte porque no estas incluyendo la libreria Java MediaFramework, te sugiero que te pases por este tuto:

    http://jc-mouse.blogspot.com/2009/12/reproducir-video-en-java-y-netbeans-con.html

    ResponderEliminar
  8. Tengo un pequeño problema con el proyecto que as adjuntado arriba.
    Yo lo descargo y lo abro con el Netbeans, le adjunto la libreria JMF que tengo descargada y instalada en Ubuntu pero a la hora de ejecutar-lo, cuando abro un archivo mp3 (solo e probado en este formato) me salta el siguiente error:
    Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
    Failed to realize: com.sun.media.PlaybackEngine@a68fd8
    Error: Unable to realize com.sun.media.PlaybackEngine@a68fd8
    03-jun-2010 16:45:09 jcmousemp3.mp3 Abrir_mp3
    GRAVE: null
    javax.media.CannotRealizeException
    at javax.media.Manager.blockingCall(Manager.java:2005)
    at javax.media.Manager.createRealizedPlayer(Manager.java:528)
    at jcmousemp3.mp3.Abrir_mp3(mp3.java:117)
    at jcmousemp3.reproductor.jMenuItem1ActionPerformed(reproductor.java:147)
    at jcmousemp3.reproductor.access$200(reproductor.java:6)
    at jcmousemp3.reproductor$3.actionPerformed(reproductor.java:130)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
    at java.awt.Component.processMouseEvent(Component.java:6263)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6028)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

    Yo creo que el problema esta en la libreria JMF que no consigo que se instale correctamente el linux (en windows no hay problema).
    Lo que me parece raro es que de el error aun adjuntando los .jar de la libreria JMF.
    Si podeis hechar-me una mano os lo agradecere. Gracias y perdon por la extension.

    ResponderEliminar
  9. masip
    tu problema esta en los codec, tu linux no esta reconociendo o no tiene el codec correctamente instalado. te sugiero que te pases por aqui:
    http://java.sun.com/javase/technologies/desktop/media/jmf/mp3/download.html
    en esa pagina te descargas el plugin de java para mp3 y lo instalas

    java com.sun.media.codec.audio.mp3.JavaDecoder

    fijate que lo tienes bien instalado, para eso ingresa a JMF registry, en la tercera pestaña PLUGINS y ahi en la segunda pestaña CODEC y buscalo

    espero te funcione :D

    ResponderEliminar
  10. HOLA YO ESTOY TRABAJANDO EN UN PROYECTO QUE USA JMF PERO LO QUE QUIERO HACER ES CAPTURAR UNA IMAGEN DE LA CAMARA DE MI COPUTADOR Y GUARDARLA EN UNA CARPETA AGRADESCO ME DEN UNA ORIENTACION O ALGUNA DOCUMENTACION DE JMF QUE ESTE EN ESPAÑOL CON ALGUNOS EJEMPLOS QUE ME PERMITA ENTERDERLO

    ResponderEliminar
  11. Gracias por contestar Mouse.
    Bien te comento, e descargado el plugin de mp3 lo e descomprimido y e copiado el .jar a la ruta /usr/lib/jvm/java-6-sun/jre/lib/ext/ tambien lo e copiado a la carpeta de JMF en la parte de lib que tengo en el home por si las moscas.
    Una vez hecho esto e ejecutado el comando que me señalaste y no me lo reconoce ja que salta una excepcion de classnotfound.
    Respecto al JMF registry, efectivamente no esta el plugin hay y no lo puedo añadir (aparte de que tengo problemas con el programa porque se queda colgado).
    No creo que este bien instalado el plugin lo instale siguiendo unas instrucciones de una web que encontre, ya que en la pagina de sun no dan demasiados detalles. Seguire investigando.
    Gracias por tu atención y perdona por la extension.

    ResponderEliminar
  12. hola si me puedes ayudar que librerias nomas tengo que agregar al proyenco para que funcione lo del mp3.
    gracias por tu atencion.

    ResponderEliminar
  13. hola un favor si me podrias ayudar a ponerle al reproductor una lista para ir agregando caciones que se bayan a repruducir, que la reproduccion sea continua y botones para cambiar las canciones y el boton de pause gracias por tu ayuda.

    ResponderEliminar
  14. hola no tendras uno que pueda cambiar de cacnion hacia adelamte y hacia atras y que cuadno se termine la cacnion empieza la que este adelante??

    ResponderEliminar
  15. Hola que hay.

    Muchas gracias por el ejemplo, se entiende perfectamente, pero tengo un problema.

    ¿Como tengo que hacer si en vez de seleccionar una canción y reproducirla, lo que quiero es reproducir las urls de las canciones que tengo guardadas en un ArrayList?.

    ¿Hay algún ejemplo por ahí?. He intentado de muchas maneras modificando el código que has puesto, y no lo consigo.

    Mi dirección de correo es gipuzkoa41@hotmail.com

    Un saludo, y muchas gracias.

    ResponderEliminar
  16. Hola te comento que yo eh trabajado un reproductor algo mas complejo pero entendible al puro estilo winamp junto con algunas funciones propias te dejo mi direccion ahi deje una version:
    http://jonathan-palomino.blogspot.com/

    ResponderEliminar
  17. Hola, ps yo tambien ando trabajando en un reproductor de musica y video con la libreria BasicPlayer, sin embargo al igual q con la libreria jmf, solo puedo lograr reproducir ciertos formatos, me gustaria saber como le podria agregar otros codecs o que reconosca los instalados en windows, Gracias :D.

    ResponderEliminar
  18. oye muy buena tu pagina
    he estado viendo todos tus ejemplos
    buen trabajo y gracias por todo esto

    ResponderEliminar
  19. Hola como andan? muchachos, intente usar las librerias JMF para reproducir un MP3 y me salio el siguiente mensaje " Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
    Failed to prefetch: com.sun.media.PlaybackEngine@72f6f1b6
    Error: Unable to prefetch com.sun.media.PlaybackEngine@72f6f1b6"

    Si bien he bajado e instalado JMF y el plugin de Mp3 no se que podria ser. tienen alguna idea de como orientarme para resolver este problema? saludos.

    Martin

    ResponderEliminar
  20. hola... yotengo el mismo problema que Martin...

    me instale el plugin y me baje el jmf, pero me sigue tirando el mismo error..

    Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
    Failed to realize: com.sun.media.PlaybackEngine@e06703
    Error: Unable to realize com.sun.media.PlaybackEngine@e06703
    03/12/2010 18:45:37 sonido.mp3 Abrir_mp3
    GRAVE: null
    javax.media.CannotRealizeException


    si alguien me puede ayudar se lo agradeceria..

    Ronny

    ResponderEliminar
  21. eit ola, me agradan tus aportes e tomado varios ejempos para mis propios programas, bueno a lo que interesa veras estoy trabajando en un software de video rockola en java(netbeans / windows) bueno mi duda seria si existe una manera de reproducir varios tipos de audio y video (flv, mp4, avi, wav, etc)... pues para que este mas completa, usando algun codec o alguna libreria o algo jeje gracias por tu aportes y tu ayuda

    ResponderEliminar
  22. Hola viejo, muy buen post, yo soy programador, y queda clarito, saludos y gracias

    ResponderEliminar
  23. noc q librerias poner para q funcione
    ALGUIEN ME PUEDE AYUDAR

    ResponderEliminar
  24. se utliza las liberias de Java Media Framework

    http://java.sun.com/javase/technologies/desktop/media/jmf/mp3/download.html

    ResponderEliminar
  25. Que hay compa, muy buen blog, tengo un problema con un reproductor, lo que pasa en mi reproductor tengo una lista donde agrego todos los archivos mp3 a reproducir, y al darle doble clic que se cargen, pero pasa algo extraño, me manda este error:
    Error: Unable to realize com.sun.media.amovie.AMController@19cc1b
    javax.media.CannotRealizeException

    t es en esta linea:
    mediaPlayer = Manager.createRealizedPlayer( url );
    lo extraño esque aveces si lo reproduce, pero otras veces no, alguna idea de por donde pueda ser?, antes de reproducirlos muevo los archivos mp3 a una carpeta temporal, los archivos si se crean bien, ya que los puedo reproducir en el reproductor de windows, bueno por tu atencion gracias.

    ResponderEliminar
  26. Ana

    Hola buenas tardes.
    Una pregunta que metodo o como podria hacer para poder manipular 2JList. Bueno lo que en si quiero, es que cuando yo seleccione un item en un JList al presionar una tecla en especifico, se pocesione el foco en el JList siguiente.
    Lo he tratado de hacer con getFocus pero segun que JList no tiene esa propiedad, Pueden ayudarme?

    gracias

    ResponderEliminar
  27. Jonathan Rojas rojas_23547@hotmail.com5 de mayo de 2011, 6:05

    Hola mouse, tu proyecto me sirvió de gran ayuda, pude hacer un excelente reproductor con miles de metodos que vemos en reproductores comunes, lo que nunca pude encontrar fue como manejar el volumen del audio, me podrías ayudar?? agradecido

    ResponderEliminar
  28. Oye Viejo Esta Chido tu Post, Pero Llevo Tiempo Buscando Una Solucion Para Este Error:
    Error: Unable to realize com.sun.media.amovie.AMController@78bc3b
    Y No Encuentro Una Solucion, Solo Reprodusco Archivos MP3, Pero Cuando La Velocidad De Transmisicion Es De 320kb Se Cae En Este Error, Please Ayuda

    ResponderEliminar
  29. Hola queria saber si alguien me puede ayudar necesito un reproductor de audio y video en uno solo pero no consigo hacrlo...estoy utilizando el API JMF.de antemano gracias a JC Mouse

    ResponderEliminar
  30. Saludos oie muy buena pagina de verdad excelente una duda tendrás algún tema donde expliques como cambiar la forma de un botón hacerlo circular como aparece en tu imagen tu version personal del reproductor winamp el play es circular

    ResponderEliminar
  31. HOLA MOUSE OJALA ME AYUDES TODO IBA BIEN CON EL PROGRA PERO YA PARA SELECCIONAR LA CANCION A REPRODUCIR NO ME LANZA LA VENTANA PARA LOCALIZARLA Y SELECCIONARLA SEGUN YO ESTA BIEN...PERO OVIO NO LO ESTA NO SE SI SEBES EL XQ DE ESTO...TE AGRADECERIA MUCHO GRACIAS

    ResponderEliminar
  32. Tengo una pregunta, sobre JMF queria saber si se pueden comparar dos sonidos y que retorne si son iguales o no, es que estoy en medio de un proyecto y necesito realizar la comparacion de dos sonidos.

    mi correo es decco_reighan_msku10@hotmail.com

    ResponderEliminar
  33. Disculpa soy medio nuevo en esto de java, al escoger una cancion y poner play no me sale el sonido ni se mueve el jSlider se me activa el label q dice q esta reproduciendo pero el resto no.. si me pudieras ayudar con eso
    y muchas gracias

    ResponderEliminar
  34. Q tal tengo hecho un reproductor pero utilizando la libreria JavaZoom y JavaBasicPlayer pero puedo hacer que se mueva el Jslider pero quiero que cuando muevo en el Jslider se me adelante o retroceda la cancionesta es la manera como hago q se mueva el Jslider

    //Creo el timer que entre en el metodo a los 250ms y agrego el evento ActionListener.

    Timer tmpActualizar=new Timer(250, new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    //maxbyte es el numero total de bytes que tiene la cancion
    maxByte=(int)reproducir.getTamanoBits();

    //changeByte es el numero de bytes que tiene conforme avanza la cancion changeByte=reproducir.getProgresoActual();


    //barraAvance es el Jslider y le mando como maximo maxByte
    barraAvance.setMaximum(maxByte);

    //Y para que se mueva con ChangeByte y se actualiza cada vez que entra al timer
    barraAvance.setValue(changeByte);


    //cuando el numero total de bytes es igual a los bytes que transcurren es que se termino la cancion y por lotanto le doy a siguiente cancion if(maxByte==changeByte){
    numCancion++;
    if(!listaDoble.vacia()&&numCancion<=listaDoble.cantidad()){
    if(btnAleatorio.isSelected()){
    numCancion=rand(contSong);
    }
    cambiarCancion();
    }else
    numCancion--;
    }

    }
    });

    ResponderEliminar
  35. Que tal amigo me parecio muy bueno tu ejemplo de reproductor. Te cuento que me en encuentro realizando un proyecto parecido y me gustaria que el look and feel se visualizara con los mismos estilos del proyecto winamp que estas trabajando. Es posible que me indiques cuales son las librerias y javadocs necesarios para utilizar ese look and feel(azul oscuro y negro). Quedo atento y muchas gracias por tu colaboracion. siegfried4110@hotmail.com

    ResponderEliminar
  36. Hola mouse, muy buenos tus aportes, hace poco que comienzo a visitar tu blog me parece genial!.

    Bueno, tengo una cuestión al igual que te comenta Oscar Garcia, sobre como logras establecer el look and feel de tu reproductor, el que muestras al final del vídeo y en la ultima imagen, ¿haces uso de alguna librería en especifico o como es que estableces ese look and feel?, me podrías orientar un poco como logras esa apariencia, te lo agradecería infinitamente...

    Muy buen blog.
    Saludos desde México!!
    sognare.1@hotmail.com

    ResponderEliminar
  37. hola mouse
    una pregunta ya hice todo como lo pusiste en el codigo que de echo salio perfecto pero ahora lo que quiero es poner 2 botones el de pausa y continuar, pero me fije en los metodos que trae el javax.mediaplayer
    y no viene esos 2 metodos
    como podria hacer esto ???

    ResponderEliminar
  38. Oscar y Thony no utilizo mimgun look and feel para las ventas, sino repinto los componente con imagenes

    Cristian segun recuerdo JMF no tiene el metodo PAUSA asi que tendrias que capturar la duraccion del video y cuando se preione un botn pausa capturar en que parte ddel video se detuvo y despues con esa informacion reanudarlo

    ResponderEliminar
  39. Gracias por este ejemplo del reproductor, lo probe y si me funciono, ahora lo de pausa, siguiente y anterior creo q es con nodos o listas enlazadas si no estoy mal, Saludos.

    ResponderEliminar
  40. GRACIAS!!!!!
    YA LO ROBÉ Y ES UNA MARAVILLA... MI PROYECTO SERÁ EL MÁS GENIAL...

    ResponderEliminar
  41. Hola, descargo el proyecto pero no me sirve en mi netbeans, quiza es xq tengo la version 7.3... podrias ayudarme?

    ResponderEliminar
  42. hola, he descargado el código fuente y traté de utilizarlo, se reproduce, pero no toque. ¿Qué debo hacer?

    ResponderEliminar
  43. gracias amigo me sirvió tu programa muy bueno y fácil de entender

    ResponderEliminar