Reproducción de Sonidos en Android (Video)


En este Video-Tutorial vamos a ver como reproducir sonidos o ficheros de audio en Android. Para ello vamos a utilizar la librería “MediaPlayer” que nos proporciona Android. Existe también otra librería llamada “SoundPool” para la reproducción de audio que además permite jugar con el sonido, reproduciéndolo más rápido, balancearlo, etc. lo que pasa es que solo reproduce ficheros de audio pequeños y por eso hemos optado por hacer este tutorial utilizando la librería de “MediaPlayer”.

El proyecto realizado en este Video-Tutorial lo podéis descargar pulsando AQUI.

Comparte esta entrada en:
Safe Creative #1401310112503
Reproducción de Sonidos en Android (Video) por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

19 comentarios en “Reproducción de Sonidos en Android (Video)”

  1. Lo primero felicitarte por este y por todos los tutoriales que haceis, lo explicais todo muy bien. Mi proble es que en mi aplicación se va el sonido algunas veces y ya no vuelve hasta que vuelves a empezar. Uso MediaPlayer de manera similar a como lo has explicado. ¿Por qué puede pasar esto? Alguna idea. Gracias.

    1. Hola Frank, puede deberse a bastantes causas. Si quieres que el sonido se reproduzca siempre casi mejor que crees un hilo a parte (http://jarroba.com/asynctask-en-android/) o un Service (http://developer.android.com/intl/es/guide/components/services.html) que lo ejecute. Tienes más ejemplos de ayuda en http://developer.android.com/intl/es/guide/topics/media/mediaplayer.html . También es buena idea guardar (puedes utilizar SharedPreferences http://developer.android.com/intl/es/training/basics/data-storage/shared-preferences.html) el punto donde se quedó el audio para poder continuar la reproducción si es necesario (El ciclo de vida de MediaPlayer lo tienes en http://developer.android.com/intl/es/reference/android/media/MediaPlayer.html).

      Y gracias por las felicitaciones 🙂

  2. una pregunta, si no quiero reproducir eso en el emulador, lo quiero pasar a un celular, como le hago para que se reproduca, ya genere el apk, pero no me reproduce nada en el celular

  3. Hola.

    Estoy desarrollando una app en español y en ingles. Con los textos la traducción va bien, pero con el audio no se como hacer para que seleccionar los archivos de audio correspondientes al idioma seleccionado al inicio de la app

    ¿tienes alguna idea o consejo de como seleccionar los audios del idioma? ¿sabes si existe algo parecido a lo de los textos con el archivo strings.xml en varios idiomas?

    Muchas gracias

    Saludos.

    1. Buenas David. Existen varias maneras de enfocar lo que pides, pero creo que lo mejor sería detectar el idioma (detectar que ha cabiado la configuración de la Activity: http://developer.android.com/intl/es/guide/topics/manifest/activity-element.html#config) y cambiar a un fichero u otro de audio (cambiando el id del fichero, por ejemplo guardando en un XML para cada idioma; tienes ejemplos que te serán de ayuda en nuestro libro de Android gratuito http://jarroba.com/libro-android-100-gratis/ en la parte de resources)

  4. Hola, como puedo hacer que al darle clic al botón para que se reproduzca el sonido este también se reproduzca al mismo tiempo en varios dispositivos con la aplicación???

  5. Hola, yo hice varios botones, cada uno reproduce un sonido diferente, el problema es que cuando se da click en un botón este reproduce el sonido y no para hasta cerrar la aplicación, y si presionas varios botones se reproducen todos los sonidos que sea presionado, ¿Cómo puedo hacer para cuando se presione un botón el otro pare y solo suene el que se presiona ?
    este es el código… pueden poner como queda el código para arreglar este problema
    public class MyActivity extends Activity {

    private MediaPlayer mp;
    private Button butonperro;
    private Button butongato;
    private Button butoncaballo;
    private Button butongallo;
    private Button butonmono;
    private Button butonleon;
    private Button butonvaca;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    butonperro = (Button)findViewById(R.id.butonperro);
    butonperro.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    mp = MediaPlayer.create(MyActivity.this,R.raw.perro);
    mp.start();

    }
    });

    butoncaballo = (Button)findViewById(R.id.butoncaballo);
    butoncaballo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.caballo);
    mp.start();
    }
    });

    butongato = (Button)findViewById(R.id.butongato);
    butongato.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.gato);
    mp.start();
    }
    });

    butongallo = (Button)findViewById(R.id.butongalo);
    butongallo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.gallo);
    mp.start();
    }
    });

    butonmono = (Button)findViewById(R.id.butonmono);
    butonmono.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.mono);
    mp.start();
    }
    });

    butonleon = (Button)findViewById(R.id.butonleon);
    butonleon.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.leon);
    mp.start();
    }
    });

    butonvaca = (Button)findViewById(R.id.butonvaca);
    butonvaca.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    mp = MediaPlayer.create(MyActivity.this,R.raw.vaca);
    mp.start();
    }
    });

    }

    }

    1. Hola Juan Diego,

      Tan solo te falta detener el audio cuando cargas la siguiente, sino se te solaparán. Utiliza el método mp.stop(); antes de iniciar la siguiente reproducción y antes de cargar el siguiente audio, con esto todo solucionado 🙂

      1. @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        butonperro = (Button)findViewById(R.id.butonperro);
        butonperro.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        mp = MediaPlayer.create(MyActivity.this,R.raw.perro);
        mp.start();

        }
        });

        butoncaballo = (Button)findViewById(R.id.butoncaballo);
        butoncaballo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.caballo);
        mp.start();
        }
        });

        butongato = (Button)findViewById(R.id.butongato);
        butongato.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.gato);
        mp.start();
        }
        });

        butongallo = (Button)findViewById(R.id.butongalo);
        butongallo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.gallo);
        mp.start();
        }
        });

        butonmono = (Button)findViewById(R.id.butonmono);
        butonmono.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.mono);
        mp.start();
        }
        });

        butonleon = (Button)findViewById(R.id.butonleon);
        butonleon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.leon);
        mp.start();
        }
        });

        butonvaca = (Button)findViewById(R.id.butonvaca);
        butonvaca.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        mp = MediaPlayer.create(MyActivity.this,R.raw.vaca);
        mp.start();
        }
        });

        }

        }
        —-DISCULPA RAMON EN QUE PARTE TENDRIA QUE PONER EL METODO MP.STOP(); ???

        1. Hola!
          Tendrías que poner el stop() antes de empezar el siguiente audio. Como veo en tu código, tienes un reproductor con botones, pues deberá de ser lo primero, antes del método start();

    1. Hola jpier,

      tan fácil como tener una variable MediaPlayer para cada sonido (aunque de este modo se te montarán los sonidos). Lo mejor es tener una única variable MediaPlayer y cambiar el sonido con MediaPlayer.create(). Lo dicho, fácil 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR