Reproductor MP3
ReproductorMP3.java
package com.dansan.reproductor;
import java.io.IOException;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
import javax.media.CannotRealizeException;
import javax.media.Codec;
import javax.media.Format;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PlugInManager;
import javax.media.format.AudioFormat;
import javax.swing.JSlider;
public class ReproductorMP3 {
Player player;
int velocidad = 1000;
int cuadro;
Timer tiempo;
TimerTask tarea;
boolean reproduciendo;
public ReproductorMP3(URL url){
/* Esta es la direccion del codec que decodifica los mp3 */
String jffmpegAudioDecoder = "net.sourceforge.jffmpeg.AudioDecoder";
/* Cargamos el codec y lo guardamos en un objeto de tipo Codec */
Codec codecAudio = null;
try {
codecAudio = (Codec) Class.forName(jffmpegAudioDecoder).newInstance();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/* Agregamos los codec al PlugInManager */
PlugInManager.addPlugIn(jffmpegAudioDecoder,codecAudio.getSupportedInputFormats(),new Format[]{new AudioFormat("LINEAR")},PlugInManager.CODEC);
try {
player = Manager.createRealizedPlayer(url);
} catch (NoPlayerException | CannotRealizeException | IOException e) {
e.printStackTrace();
}
}
//metodos play, stop y cerrar
public void play(){
player.start();
reproduciendo=true;
}
public void stop(){
player.stop();
reproduciendo=false;
}
public void cerrar(){
if(reproduciendo){
stop();
player.close();
}
}
//metodos de la barras de volumen y tiempo
public void moverBarra(final JSlider slider){
tiempo = new Timer();
tarea = new TimerTask(){
public void run(){
cuadro = (int) Math.round(player.getMediaTime().getSeconds()*100 / player.getDuration().getSeconds());
if(player.getMediaTime().getSeconds()==player.getDuration().getSeconds()||!reproduciendo){
cuadro = 100;
stop();
}else{
slider.setValue(cuadro);
}
String tiempo = getTiempo();
slider.setToolTipText(tiempo);
}
};
tiempo.schedule(tarea, 0, velocidad);
}
public void pararBarra(final JSlider slider){
if(reproduciendo){
tarea.cancel();
tiempo.cancel();
}
}
public float getVolumen(){
return player.getGainControl().getLevel();
}
public void setVolumen(float volumen){
player.getGainControl().setLevel(volumen/100f);
}
public String getDuracion(){
String cad="";
double segundos = player.getDuration().getSeconds();
int minutos = (int) (segundos / 60);
for(int i=0;i<minutos;i++){
segundos = segundos - 60;
}
int segundosAux =(int) (segundos);
if(minutos<10)cad += "0";
cad+=minutos+":";
if(segundosAux<10)cad += "0";
cad+=segundosAux;
return cad;
}
public String getTiempo(){
String cad="";
double segundos = player.getMediaTime().getSeconds();
int minutos = (int) (segundos / 60);
for(int i=0;i<minutos;i++){
segundos = segundos - 60;
}
int segundosAux =(int) (segundos);
if(minutos<10)cad += "0";
cad+=minutos+":";
if(segundosAux<10)cad += "0";
cad+=segundosAux;
return cad;
}
}
Reproductor.java
package com.dansan.reproductor;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Reproductor extends JFrame implements ActionListener,ChangeListener,ListSelectionListener{
private JPanel panelSup,panelInf,panelMedio;
private JButton botonPlay,botonStop;
private JList areaCanciones;
private File[] canciones;
private JLabel labelCancion,labelVolumen, labelTiempo,labelDuracion;
private ReproductorMP3 cancion;
private JSlider sliderVolumen, sliderTiempo;
private JScrollPane scroll;
private int indice;
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem Abrir,Salir;
public Reproductor(){
Gui();
}
public void Gui(){
super.setTitle("Reproductor");
setSize(800, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
ImageIcon icono = new ImageIcon(getClass().getClassLoader().getResource("imagenes/icono.png"));
setIconImage(icono.getImage());
//creo el menu de la aplicacion
menuBar = new JMenuBar();
menuBar.setBackground(Color.BLACK);
menuBar.setForeground(Color.white);
menu = new JMenu("Archivo");
menu.setBackground(Color.BLACK);
menu.setForeground(Color.white);
Abrir = new JMenuItem("Abrir");
Abrir.setBackground(Color.BLACK);
Abrir.setForeground(Color.white);
Salir = new JMenuItem("Salir");
Salir.setBackground(Color.BLACK);
Salir.setForeground(Color.white);
menu.add(Abrir);
menu.add(Salir);
menuBar.add(menu);
setJMenuBar(menuBar);
panelSup = new PanelPersonal();
panelSup.setLayout(new FlowLayout());
labelCancion = new JLabel("Ninguna cancion cargada");
labelCancion.setForeground(Color.WHITE);
panelSup.add(labelCancion);
this.add(panelSup,BorderLayout.NORTH);
panelMedio = new JPanel(new GridLayout(1,1,10,10));
areaCanciones = new JList();
scroll = new JScrollPane(areaCanciones);
panelMedio.add(scroll);
this.add(panelMedio,BorderLayout.CENTER);
panelInf = new PanelPersonal();
panelInf.setLayout(new FlowLayout());
labelVolumen = new JLabel("Volumen");
labelVolumen.setForeground(Color.white);
sliderVolumen = new JSlider();
sliderVolumen.setMinimum(0);
sliderVolumen.setMaximum(60);
botonPlay = new JButton();
ImageIcon iconoPlay = new ImageIcon(getClass().getClassLoader().getResource("imagenes/ButtonPlay.png"));
ImageIcon iconoPlayAux = new ImageIcon(iconoPlay.getImage().getScaledInstance(25, 25, Image.SCALE_AREA_AVERAGING));
botonPlay.setIcon(iconoPlayAux);
botonPlay.setEnabled(false);
botonStop = new JButton();
ImageIcon iconoParar = new ImageIcon(getClass().getClassLoader().getResource("imagenes/ButtonStop.png"));
ImageIcon iconoPararAux = new ImageIcon(iconoParar.getImage().getScaledInstance(25, 25, Image.SCALE_AREA_AVERAGING));
botonStop.setIcon(iconoPararAux);
botonStop.setEnabled(false);
labelTiempo = new JLabel("Tiempo");
labelTiempo.setForeground(Color.white);
sliderTiempo = new JSlider();
labelDuracion = new JLabel(" ");
labelDuracion.setForeground(Color.white);
panelInf.add(labelVolumen);
panelInf.add(sliderVolumen);
panelInf.add(botonPlay);
panelInf.add(botonStop);
panelInf.add(labelTiempo);
panelInf.add(sliderTiempo);
panelInf.add(labelDuracion);
this.add(panelInf,BorderLayout.SOUTH);
botonPlay.addActionListener(this);
botonStop.addActionListener(this);
Abrir.addActionListener(this);
Salir.addActionListener(this);
sliderVolumen.addChangeListener(this);
areaCanciones.addListSelectionListener(this);
setVisible(true);
}
//metodos de los botones
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==Abrir){
URL url= null;
JFileChooser jfc = new JFileChooser();
jfc.setFileFilter(new FileNameExtensionFilter("Archivo de sonido .mp3","mp3"));
jfc.setMultiSelectionEnabled(true);
int apr = jfc.showOpenDialog(this);
if(apr == jfc.APPROVE_OPTION){
try {
canciones = jfc.getSelectedFiles();
url = canciones[0].getAbsoluteFile().toURL();
labelCancion.setText(jfc.getSelectedFile().getName());
areaCanciones.setListData(canciones);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
cancion = new ReproductorMP3(url);
labelDuracion.setText(cancion.getDuracion());
botonPlay.setEnabled(true);
}else if(e.getSource()==botonPlay){
cancion.play();
cancion.moverBarra(sliderTiempo);
botonStop.setEnabled(true);
botonPlay.setEnabled(false);
}else if(e.getSource()==botonStop){
cancion.stop();
cancion.pararBarra(sliderTiempo);
botonPlay.setEnabled(true);
botonStop.setEnabled(false);
}else if(e.getSource()==Salir){
System.exit(0);
}
}
public static void main(String[] args){
Reproductor reproductor = new Reproductor();
}
//metodo que se ejecuta al hacer clic en un item del JList
@Override
public void stateChanged(ChangeEvent event) {
if(event.getSource()==sliderVolumen){
float volumen = sliderVolumen.getValue();
cancion.setVolumen(volumen);
}
}
@Override
public void valueChanged(ListSelectionEvent event) {
if(event.getSource()==areaCanciones){
indice = areaCanciones.getSelectedIndex();
cancion.cerrar();
cancion.pararBarra(sliderTiempo);
URL url=null;
try {
url = canciones[indice].toURL();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cargarCancion(url);
}
}
//metodo que carga la cancion elegida del JList
public void cargarCancion(URL url){
cancion = null;
cancion = new ReproductorMP3(url);
labelCancion.setText(canciones[indice].getName());
cancion.play();
cancion.moverBarra(sliderTiempo);
botonPlay.setEnabled(false);
botonStop.setEnabled(true);
labelDuracion.setText(cancion.getDuracion());
}
}
Diagrama generado con ObjectAid
Imagenes del Reproductor ejecutandose
El jar del programa
http://freakshare.com/files/k5wozonu/reproductormp3.jar.htmlPara ejecutar: java -jar reproductormp3.jar (en el directorio del jar)
nota: Es necesario tener instalado la api Java Media Framework.
Comentarios
Publicar un comentario