- José Enrique Amaro Soriano
- Android
- index_split_015.html
11. REPRODUCIR
SONIDO
11.1. Uso de
MediaPlayer
Los archivos
de sonido se reproducen mediante un objeto de la clase
MediaPlayer,
perteneciente al paquete android.media. Esta
clase soporta varios tipos de formato de audio, entre los cuales se
encuentran los que tienen extensiones wav, mp3 y ogg. Los archivos
de sonido pueden incluirse en la aplicación copiándolos en la
carpeta res/raw. La
carpeta raw puede crearse
desde Eclipse pulsando con el botón derecho sobre la carpeta
res
y seleccionando nueva
carpeta. El siguiente paso es
copiar nuestros ficheros de sonido en la carpeta
res/raw
del proyecto. Es posible que necesitemos
renombrar alguno de estos ficheros, pues sólo son legales los
caracteres en minúscula de la a a la z (sin acentos), los números
del 0 al 9 y el guión de subrayado (_). El resto de los caracteres
producirán un error en Eclipse al copiar los ficheros. Por ejemplo,
en la siguiente actividad hemos tenido que cambiar el nombre al
fichero Black-Magic-Woman.mp3 por black_magic_woman.mp3}, pues el guión (-) y las mayúsculas son caracteres
ilegales.
Para
reproducir un fichero de sonido hay que crear un objeto de
tipo MediaPlayer mediante
la siguiente secuencia de instrucciones:
MediaPlayer
mplayer;
// libera el
MediaPlayer
if(mplayer !=
null) mplayer.release();
mplayer =
MediaPlayer.create(this, R.raw.fichero);
mplayer.seekTo(0);
mplayer.start();
La segunda
instrucción llama al método release(). Esto es esencial para evitar sobrecargar el sistema
con múltiples instancias simultáneas de objetos MediaPlayer, en cuyo caso la aplicación se abortaría. Hay que tener
la precaución también de llamar al método release()si la aplicación pasa al background (esto se hace en el
método onPause()).
La siguiente
actividad, basada en el ejemplo “Hola Android”, define un
método musica()que reproduce
un archivo de música mp3 al ejecutarse. Cuando la actividad pasa al
background la reproducción se detiene.
import
android.app.Activity;
import
android.media.MediaPlayer;
import
android.os.Bundle;
import
android.view.View;
public class
Reproducir extends Activity{
MediaPlayer
mplayer;
@Override
public void onCreate(Bundle
savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
musica();
}
void musica(){
// libera el
MediaPlayer
if(mplayer != null)
mplayer.release();
mplayer =
MediaPlayer.create(this,
R.raw.black_magic_woman);
mplayer.seekTo(0);
mplayer.start();
}
@Override
public void onPause()
{
super.onPause();
//
libera el mediaplayer
if(mplayer
!= null) mplayer.release();
}
}
11.2. Reproducir
efectos de sonido
En el
siguiente ejemplo utilizaremos varios ficheros de audio con efectos
de sonido, con los formatos wav y mp3. Se pueden encontrar archivos
con efectos de sonido de libre distribución que se pueden descargar
gratuitamente de varias páginas web. Los archivos de nuestro
ejemplo los hemos descargado de:
http://www.pacdv.com/sounds/people_sounds.html
Como antes,
copiamos estos ficheros en la carpeta res/raw de nuestro proyecto. Es posible que necesitemos
renombrar alguno de ellos si contienen caracteres ilegales. En esta
actividad definimos cuatro botones para reproducir cuatro ficheros
de sonido.
public class
Sonidos extends Activity implements
OnClickListener{
MediaPlayer
mplayer;
/** Called when
the activity is first created. */
@Override
public void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button boton1=(Button)
findViewById(R.id.boton1);
boton1.setOnClickListener(this);
Button boton2=(Button)
findViewById(R.id.boton2);
boton2.setOnClickListener(this);
Button boton3=(Button)
findViewById(R.id.boton3);
boton3.setOnClickListener(this);
Button boton4=(Button)
findViewById(R.id.boton4);
boton4.setOnClickListener(this);
}
@Override
public void
onClick(View v) {
// libera el
MediaPlayer
if(mplayer != null)
mplayer.release();
int
id=v.getId();
if(id ==
R.id.boton1)
mplayer =
MediaPlayer.create(this, R.raw.laugh_1);
else if(id ==
R.id.boton2)
mplayer =
MediaPlayer.create(this, R.raw.laugh_4);
else if(id ==
R.id.boton3)
mplayer =
MediaPlayer.create(this, R.raw.applause2);
else
mplayer =
MediaPlayer.create (this,
R.raw.peoplelaughing1);
mplayer.seekTo(0);
mplayer.start();
}
@Override
public void
onPause() {
super.onPause();
// libera el mediaplayer en el
background
if(mplayer != null)
mplayer.release();
}
}
El layout
correspondiente a esta aplicación contiene cuatro botones definidos
en el siguiente fichero main.xml de la forma
usual (figura 11.1).
<?xml
version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#ffffff"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:textSize="30sp"
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="PULSAR LOS
BOTONES PARA ESCUCHAR LOS SONIDOS"
/>
<Button
android:text="Risa1"
android:id="@+id/boton1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Risa2"
android:id="@+id/boton2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Aplausos"
android:id="@+id/boton3"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Risas"
android:id="@+id/boton4"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
</LinearLayout>

Figura 11.1.
Reproducir efectos de
sonido.