Bienvenidos sean a este post, ya hemos visto como reproducir audio y video por medio de Android ahora lo agregaremos a dos elementos de nuestro juego, en este caso a misil y a los asteroides, para ello vamos a abrir nuestro proyecto Asteroides por medio de Android Studio.

Anuncios

Primero vamos descargar al siguiente archivo donde estaran almacenados nuestros sonidos

Una vez descargado extraigan los archivos en su pc, copienlo los mismos en el recurso res/raw, recuerden Ctrl+C en su equipo y luego Ctrl+V en el recurso desde Android Studio, una vez hecho debera quedar de la siguiente manera

Con esto realizado pasaremos a nuestro siguiente paso, crearemos las siguientes dos variables en la clase VistaJuego:

MediaPlayer mpDisparo, mpExplosion;

Aca creamos las variables para nuestros sonidos, nuestro siguiente paso sera agregar a nuestro constructor las siguientes lineas:

mpDisparo = MediaPlayer.create(context,R.raw.disparo);
mpExplosion = MediaPlayer.create(context,R.raw.explosion);

Con estas dos lineas inicializaremos nuestras variables y le asignaremos los archivos para trabajar con nuestros sonidos, nuestra siguiente modificacion sera en el metodo activaMisil():

mpDisparo.start();

Y en el metodo destruyeAsteroide() agregaremos la siguiente linea:

mpExplosion.start();

Ambas lineas haran la misma funcion es decir reproducir el sonido vinculado a la accion, si lo probamos notaremos un cierto retardo entre nuestra accion y nuestro sonido para evitar esto Android posee una clase llamada SoundPool, esta clase se encarga de manejar y reproducir sonidos por medio de una coleccion de sonidos permitiendo una mejor eficiencia a la hora de reproducir los mismos, esta clase utiliza a MediaPlayer para decodificar los sonidos en un formato crudo permitiendo trabajarlo en hardware directamente para mejorar la performance, tambien nos ofrece la posibilidad de generar un bucle la cantidad de veces deseada o infinito, tambien podemos variar la velocidad del sonido, pasemos a ver como trabaja por medio de las siguientes modificaciones, para empezar vamos a borrar todas las lineas que agregamos al principio, pero no borren los sonidos, luego vamos a agregar estas lineas para crear el objeto de la clase SoundPool:

Anuncios
SoundPool soundPool;
int idDisparo, idExplosion;

Con estas lineas creamos nuestro objeto de SoundPool y dos variables para identificar al disparo y a la explosion, ahora en nuestro constructor agregaremos las siguientes lineas:

soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC,0);
idDisparo = soundPool.load(context,R.raw.disparo,0);
idExplosion = soundPool.load(context,R.raw.explosion,0);

La primera linea creara y asignara un nuevo SoundPool donde el primer parametro indicara la cantidad maxima de sonidos simultaneos, el segundo es el tipo de stream de audio (en general es este) y el ultimo es la calidad de la reproduccion, las siguientes lineas se encargan de cargar nuestro sonido, el primer parametro ubica el contexto, el segundo sera el recurso en si y el ultimo parametro es el encargado de setear la prioridad del mismo, nuestro siguiente paso sera agregarlo dentro de los metodos respectivos, para el metodo activaMisil() agregaremos la siguiente linea:

soundPool.play(idDisparo,1,1,1,0,1);

y en el metodo destruyeAsteroide() agregaremos la siguiente:

soundPool.play(idExplosion,1,1,0,0,1);

Este metodo se encargara de reproducir el sonido, primero utilizaremos el id para la accion relacionado, el segundo parametro es el volumen del lado izquierdo, el tercer parametro es el volumen del lado derecho, el cuarto es la prioridad con respecto a los demas sonidos, el quinto parametro es la cantidad de veces que vamos a hacer el loop, y el ultimo es el ratio de reproduccion el cual nos permitira variar la velocidad de reproduccion. Si probamos nuestra app ahora funcionara mucho mejor, veamos el siguiente video

Anuncios

En resumen, hoy hemos visto dos formas de agregar sonidos a nuestras acciones en las actividades, primero por medio del MediaPlayer pero despues con una mejor implementacion por medio de SoundPool, espero les haya sido util sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00