Android

Android


11.REPRODUCIR SONIDO

Página 13 de 25

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.

Ir a la siguiente página

Report Page