2010-11-12 11 views
16

Tengo un pequeño mp3 (200kb) en la carpeta res/raw de mi aplicación de Android. Estoy tratando de ejecutarlo en un emulador de Eclipse. Se reconoce como un recurso en el archivo R, pero cuando intento preparar/iniciar, ¡mi actividad se bloquea! ¿Había algo más que necesitaba cambiar, tal vez en el manifiesto?¿Cómo reproduzco un mp3 en la carpeta res/raw de mi aplicación de Android?

 
MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); 

try { 
mPlayer.prepare(); 
mPlayer.start(); 
} catch (IOException e) { 
// handle this later 
} 
+0

Ponga la salida de logcat aquí, de lo contrario no podemos reconocer el error. –

Respuesta

54

Al iniciar la actividad, es decir, en onCreate ponga el siguiente código.

public void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState);   
     setContentView(R.layout.main); 

     MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); 
     mPlayer.start(); 

    } 

Al detener la actividad, es decir, en onDestroy ponga el siguiente código.

public void onDestroy() { 

    mPlayer.stop(); 
    super.onDestroy(); 

} 

espero que ayude :)

+0

También puede consultar este sitio web para obtener un tutorial más detallado http://marakana.com/forums/android/examples/59.html –

+0

¡sí! jaja aparentemente no necesitaba el mPlayer.prepare(), gracias :) – damonkashu

+0

:) no hay problema hermano –

5

es probable que prefieren utilizar la clase SoundPool. Reduce la latencia cuando es el momento de reproducir el sonido, y ofrece otras sutilezas como la posibilidad de priorizar sonidos cuando hay demasiados para tocar a la vez.

A partir de los documentos:

A Soundpool es una colección de muestras que se pueden cargar en la memoria de un recurso dentro de la APK o de un archivo en el sistema de archivos. La biblioteca SoundPool utiliza el servicio MediaPlayer para decodificar el audio en un flujo de PCM mono o estéreo sin formato de 16 bits. Esto permite que las aplicaciones se envíen con transmisiones comprimidas sin tener que sufrir la carga de la CPU y la latencia de la descompresión durante la reproducción.

Por ejemplo:

/** 
* How many sounds can be played at once. 
*/ 
private static final int MAX_SOUND_POOL_STREAMS = 4; 

/** 
* Modify this as part of your own priority scheme. Higher numbers mean higher 
* priority. If you don't care, it's okay to use the same priority for every 
* sound. 
*/ 
private static final int NORMAL_PRIORITY = 10; 

private int mySoundId; 

@Override 
public void setupContent() { 
    this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS, 
      AudioManager.STREAM_MUSIC, 100); 
    this.mySoundId = this.soundPool.load(this.getApplicationContext(), 
      R.raw.mySound, 1); 
} 

@Override 
private void playMySound() { 
    this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1); 
} 
1

este es un método estático que utilizo en mis proyectos. lo añado a mi clase Utilidades:

public static void playSound(final Context context, final SoundType type) 
    { 

      new Thread(new Runnable() 
      { 

       @Override 
       public void run() 
       { 
        MediaPlayer mediaPlayer = new MediaPlayer(); 
        int resId = -1; 
        switch (type) 
        { 
        case INCOMING_NOTIFICATION: 
         resId=R.raw.noti_sound; 
         break; 
        case SEND_BETTING_SLIP: 
         resId=R.raw.slip_sent; 
         break; 
        case TRIVIA_RIGHT_ANSWER: 
         resId=R.raw.game_bonus; 
         break; 
        case TRIVIA_WRONG_ANSWER: 
         resId=R.raw.whistle_referee_trivia_bad_answer; 
         break; 
        } 

        if (resId != -1) 
        { 
         mediaPlayer = MediaPlayer.create(context, resId); 
         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
         mediaPlayer.setLooping(false); 
         mediaPlayer.start(); 

         while (mediaPlayer.isPlaying() == true) 
         { 
         } 
        } 
       } 
      }).start(); 

     } 
} 

ahora defind una enumeración (SoundType) y se colocaron los archivos mp3 en la carpeta en la carpeta prima res.

Cuestiones relacionadas