martes, 22 de febrero de 2011

Reproducir un archivo MP3 en Java usando JLayer



Puede que queramos añadir música o algún tipo de efecto sonoro a alguna aplicación que estemos programando. Hoy explicaré como reproducir un archivo MP3 desde Java.

Para ello vamos a utilizar la librería JLayer, que es capaz de decodificar, convertir y reproducir archivos MP3 en tiempo real. Esta librería 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 versión más 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 botón derecho sobre la carpeta del proyecto; pinchamos en Propiedades; opción "Java Build Path"; pestaña Librerías; 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 reproducción (podemos encontrar la documentación de su API aquí). Concretamente utilizaremos la clase "Player" (documentación aquí).

El código


A continuación muestro una aplicación muy simple en el que se reproduce un archivo MP3 que se encuentra en mi disco duro (también se pueden reproducir archivos MP3 alojados en la web). Lo importante es la línea de código en la que se llama al constructor de la clase Player (con un objeto FileInputStream como argumento) y la línea en la que se llama al método "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 método play
        } catch (JavaLayerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

}



Cualquier duda o consulta que surja podeis ponerla en los comentarios.




miércoles, 16 de febrero de 2011

Cargar batería de dispositivos mediante puerto USB en Ubuntu (Linux)

Quizás alguna vez necesitemos cargar la batería de algún dispositivo o gadget (reproductor mp3, ipod, cámara de fotos, móvil, ...) mediante el puerto USB de nuestro pc. Si se nos ha estropeado u olvidado el cargador, o porque no tengamos más enchufes donde conectarlo, el USB nos puede sacar del aprieto.

Ésto se puede hacer en Ubuntu, pero por defecto no se suministra alimentación a los dispositivos USB, por aquello de ahorrar batería (en el caso de los portátiles). A continuación voy a explicar qué pasos hay que seguir para conseguirlo, si bien es cierto que no todos los dispositivos USB permiten esta operación.


Pasos a seguir


1. Conectar el dispositivo a un puerto USB.

2. Escribir en consola el siguiente comando, para determinar el nombre del dispositivo a cargar:

lsusb


En mi caso el dispositivo que quiero cargar es "Lab126", que corresponde al dispositivo número 3. El nombre de dispositivo sería "usb3".

3. Desconectar el dispositivo del puerto USB, pulsando previamente con el botón derecho sobre el icono del dispositivo y seleccionando la opción "Explulsar".

4. Escribir en consola los siguientes comandos, siendo DISPOSITIVO, el nombre del dispositivo a cargar:

echo -1 | sudo tee /sys/bus/usb/devices/DISPOSITIVO/power/autosuspend

echo on | sudo tee /sys/bus/usb/devices/DISPOSITIVO/power/control


En mi caso tendría que escribir:

echo -1 | sudo tee /sys/bus/usb/devices/usb3/power/autosuspend

echo on | sudo tee /sys/bus/usb/devices/usb3/power/control


El valor numérico del archivo "autosuspend" indica el tiempo en segundos que se suministra corriente antes de autosuspenderse. Poniéndolo a "-1" no se suspenderá.
El contenido del archivo "control" lo ponemos a "on" para que la alimentación no se suspenda y se mantenga "encendida".


5. Conectar el dispositivo al mismo puerto USB para empezar la carga.



NOTAS:

  • Al pulsar "suspender" en Ubuntu, el puerto USB sigue suministrando alimentación eléctrica a los dispositivos. Si apagamos Ubuntu, el puerto USB deja de suministrar alimentación.

  • Al reiniciar Ubuntu, los valores de los archivos "autosuspend" y "control" que modificamos en el punto 4, vuelven a sus valores originales (y por tanto los puertos USB no suministran corriente a los dispositivos).

  • Si hemos terminado de cargar algún dispositivo y lo hemos desconectado, es una buena idea dejar los archicos "autosuspend" y "control" con sus valores originales. Para esto tecleamos en consola lo siguiente (siendo DISPOSITIVO, el nombre del dispositivo que estamos cargando):

echo 2 | sudo tee /sys/bus/usb/devices/DISPOSITIVO/power/autosuspend

echo auto | sudo tee /sys/bus/usb/devices/DISPOSITIVO/power/control


Fuentes


http://www.mjmwired.net/kernel/Documentation/usb/power-management.txt




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO