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

22 thoughts on “Reproducción de Sonidos en Android (Video)”

  1. HOLA TENGO UN TRABAJO Y NO SE COMO HACERLO , OJALA PUEDAS AYUDARME :1.GESTION DE AUDIO EN APLICACIONES ANDROID (CON SU RESPECTIVO CODIGO DE EJEMPLO)
    2.GESTION DE VIDEO EN APLICACIONES ANDROID (CON SU RESPECTIVO
    CODIGO DE EJEMPLO).

  2. 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 🙂

  3. 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

  4. 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)

  5. Hola.

    ¿Podrías decirme cómo podría hacer que cuando le des a una imagen reproduzca un sonido/canción?

    Saludos.

    1. Puedes reproducir la canción en el momento de detectar el evento de onClick de la View de la imagen.

  6. Hola una Preguntica desde colombia … como haria para que suene un audio que este en la web o un Streaming..

    Gracias..

  7. 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???

  8. 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. disculpa yo tengo un problema al momento de reproducir un sonido. lo que pasa es que manejo mas de un boton con sonido y cuando esta reproduciendo uno y presiono otro se reproducen al mismo tiempo no se como hacer que al momento de que entre el otro sonido se detenga el anterior.

            el codigo que estoy usando esta asi:

            b2=(Button)findViewById(R.id.btn2);
            at = MediaPlayer.create(this, R.raw.atencion);
            b2.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick (View v) {

            at.start();
            };

            });

            b3=(Button)findViewById(R.id.button3);
            al = MediaPlayer.create(this, alarma);

            b3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick (View v) {

            al.start();
            };

            });

            ya intente con lo que comentaste anteriormente del stop() y si detiene el sonido anterior pero no puedo reproducirlo de nuevo si es necesario. entonces sigo con el mismo problema

          2. Es una confusión común pero muy fácil de solucionar conociendo el ciclo de MediaPlayer (ciclo de vida e MediaPlayer en https://developer.android.com/reference/android/media/MediaPlayer.html). Simplemente guarda el puntero al objeto MediaPlayer en una variable global, por ejemplo, y cuando quieras llamar a cambiar de sonido llama al stop() de la variable global que has guardado previamente y llama a release().

    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 una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

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
Aviso de cookies