En este tema veremos cómo agregar
sonido a una aplicación/juego. Aprenderemos a cómo reproducir sonidos, a
pausarlos y otras cosas. Observemos esta primera imagen:
A través de esta imagen lo que
quiero explicar es que Manager es la clase principal en
este tema y es la que va a permitir crear un Player, el cual va a
permitir reproducir audio y video. La clase control, como vemos, es la que está
dentro de Manager y Player, y va a permitir controlar
los Players que creemos. El import que debemos hacer es: javax.microedition.media.*;
Tipos de Audio y Video
Los archivos de audio y de video
tienen diferentes formatos y dependiendo del formato nuestro celular será capaz
o no de reproducirlo. No nos detendremos en cada uno de estos formatos, sólo
los mencionaremos.
Formatos De Audio
|
Clave
|
Formatos De Video
|
Clave
|
Wave audio files
|
“audio/x-wav”
|
3GP
video files
|
“video/3gp”
|
AU audio files
|
“audio/basic”
|
MPEG4 video files
|
“video/mp4”
|
MP3 audio files
|
“audio/mpeg”
|
-
|
-
|
MIDI audio files
|
“audio/midi”
|
-
|
-
|
Tone Sequences
|
“audio/x-tone-seq”
|
-
|
-
|
Existen otros formatos de audio y
de video, pero, en J2ME, estos son los importantes.
Es importante saber qué tipo de
formato soporta tu celular para que evites usar un formato inadecuado a la hora
de hacer aplicaciones/juegos para tu celular. Descarga esta aplicación que te
dirá qué formatos de audio y video soporta tu celular. Descargar App.
Si alguna vez tienes problemas con
el formato de un archivo de audio y quieres cambiarle el formato, te recomiendo
el siguiente programa. Descargar.
Si tienes problemas con el formato
de un archivo de video, te recomiendo el siguiente programa para cambiarle el
formato. Descargar.
Fuente Del Sonido
El archivo de sonido que se reproducirá en la
aplicación/juego puede obtenerse de una dirección web o de la misma
aplicación/juego. En lo particular, no he utilizado la primera opción. En este
tema sólo vamos a trabajar con la segunda opción, para lo cual debemos conocer la
clase InputStream que nos va a permitir comunicar la aplicación/juego
con el archivo de audio (o video) guardado en la misma. Se define de manera
sencilla:
InputStream inStream =
getClass().getResourceAsStream(“ubicación
del archivo”);
|
Vemos que esta vez no utilizamos la palabra “new”, y esto es una
particularidad de esta clase cuando la usamos para localizar archivos guardados
en la propia aplicación/juego. El único parámetro que debemos proporcionar es
la ubicación del archivo y esto es similar a como lo hicimos al ubicar una
imagen (ver tema correspondiente). También debemos recordar que el archivo debe
ser copiado a la carpeta “src” del proyecto que estamos creando, para que la
aplicación/juego pueda ubicarlo.
Player
El Player es el que se va a encargar de reproducir los archivos de audio
o video. Es necesario mencionar que el Player puede estar en 5 estados: UNREALIZED,
REALIZED, PREFETCHED, STARTED y CLOSED. Cuando creamos un Player está en el
estado UNREALIZED. Cuando lo pasamos al estado REALIZED el reproductor realiza
la comunicación necesaria para localizar los elementos que necesita para
funcionar (tal como un archivo). Cuando de detiene el reproductor el Player
pasa de un estado STARTED a un estado PREFETCHED.
Player de Audio
A través de la clase Manager podemos reproducir sonidos,
desde sonidos sencillos hasta archivos de sonidos, por lo tanto hay tres formas
de crear un sonido:
Sonido
|
Notas
|
Manager.playTone(...);
|
Reproduce un solo sonido.
|
Player p =
Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR)
|
Reproduce una secuencia de sonidos que determinemos.
|
Player p = Manager.createPlayer(InputStream
iStream, String clave);
|
Reproduce un archivo de audio. Ya hablamos de
InputStream. El parámetro clave
depende del tipo de archivo (ver la primera tabla de este tema).
|
Nos concentraremos en la última de estas tres formas, que es la más
importante.
Para crear un Player debemos definir primero el InputStream que utilizará
y luego podemos definir el Player. Veamos un ejemplo:
InputStream inStream = getClass().getResourceAsStream(“/música.mp3”);
Player pl =
Manager.createPlayer(inStream, “audio/mpeg”);
pl.start();
|
Luego que creemos el Player, para reproducirlo usamos el método .start();,
como muestra el ejemplo.
Nota: al crear un Player ocurren dos errores que debemos
atrapar, IOException y MediaException. Si queremos atrapar
dos errores lo que debemos hacer es agregar otro catch para atrapar el segundo
error, así:
InputStream inStream = getClass().getResourceAsStream(“/música.mp3”);
try{
Player pl = Manager.createPlayer(inStream, “audio/mpeg”);
pl.start();
}catch(IOException io){
}catch(MediaException me){}
|
Player de Video
Manager nos permite reproducir videos en nuestro celular, siempre y
cuando lo soporte. Podemos definir este tipo de Player de la siguiente manera:
Player pl =
Manager.createPlayer(InputStream iStream, String clave);
|
Pero esto no es todo lo que debemos hacer, sino que debemos tomar el
control del video y colocarlo dentro de un elemento de tipo Form (no he probado
colocarlo en un lienzo de dibujo...). Veamos un ejemplo completo:
try{
InputStream in = getClass.getResourceAsStream(“/mivideo.3gp”);
Player pl = Manager.createPlayer(in, “video/3gp”);
pl.realize();
GUIControl gc =
(GUIControl)pl.getControl(“GUIControl”);
if(gc != null){
Form form = new Form(“Mi Video”);
form.append((Item)gc.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE,
null));
}
pl.start();
}catch(MediaException me){
}catch(IOException io){}
|
Un método importantes es .setDisplayFullscreen(boolean valor);
que pertenece a VideoControl o GUIControl que permite expandir el tamaño del
video hasta que llegue al tope del ancho o alto de la pantalla (true). Se hace
de la siguiente forma:
GUIControl gc =
(GUIControl)player.getControl(“GUIControl”);
gc.setDisplayFullscreen(true);
|
Descarga la aplicación de ejemplo de este tema. Descargar App.
Descarga el código y los recursos utilizados en la aplicación. Descargar.
No hay comentarios.:
Publicar un comentario