Reproducir un sonido de res / raw

Estoy haciendo una aplicación que se supone que reproducir unos sonidos con el mediaPlayer. Este es el código que uso:

String[] name = {"sonar_slow","sonar_medium","sonar_fast"}; String link = "/res/raw/" + name[state-1] + ".mp3"; try { player.setDataSource(link); player.prepare(); player.start(); } catch(Exception e) { e.printStackTrace(); } 

También he intentado esto:

  if(state==1){ player.create(this, R.raw.sonar_slow); }else if(state==2){ player.create(this, R.raw.sonar_medium); }else if(state==3){ player.create(this, R.raw.sonar_fast); } player.start(); 

Pero nada de lo anterior está funcionando. Mi aplicación no se está bloqueando, pero el sonido no se reproduce. Algunas ideas ?

Hay dos problemas.

Problema 1

No puede hacer referencia a recursos dentro de su directorio projects / res / raw de esta manera. El archivo "/res/raw/sonar_slow.mp3" en su directorio de proyecto no se almacena en "/res/raw/sonar_slow.mp3" en su apk. En lugar de lo siguiente:

 MediaPlayer mp = MediaPlayer.create(this); mp.setSource("sonar_slow"); 

Necesitas usar

 MediaPlayer mp = MediaPlayer.create(this, R.raw.sonar_slow); 

Problema 2

Lo siguiente es incorrecto: llama a un método estático que no modifica el player .

 player.create(this, R.raw.sonar_slow); 

Deberías llamar

 player = MediaPlayer.create(this, R.raw.sonar_slow); 

Solución completa

A continuación se muestra una clase AudioPlayer reutilizable que encapsula MediaPlayer. Esto es ligeramente modificado de "Programación de Android: The Big Nerd Ranch Guide". Se asegura de recordar limpiar los recursos

 package com.example.hellomoon; import android.content.Context; import android.media.MediaPlayer; public class AudioPlayer { private MediaPlayer mMediaPlayer; public void stop() { if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null; } } public void play(Context c, int rid) { stop(); mMediaPlayer = MediaPlayer.create(c, rid); mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { stop(); } }); mMediaPlayer.start(); } } 

Cómo reproducir un archivo con MediaPlayer:

 MediaPlayer mp = MediaPlayer.create(this, R.raw.mysound); // sound is inside res/raw/mysound mp.start(); 

Este es un ejemplo sencillo de cómo reproducir un sonido con el MediaPlayer de Android.

Usted tiene dos botones sombrero cada jugar un sonido diferente. La selección del sonido y su reproducción se realiza en el método manageSound (). Los sonidos "hola", "adiós" y "qué" están en el directorio res / raw :

 MediaPlayer mp = null; String hello = "Hello!"; String goodbye = "GoodBye!"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button buttonHello = (Button) findViewById(R.id.idHello); buttonHello.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { managerOfSound(hello); } // END onClick() }); // END buttonHello final Button buttonGoodBye = (Button) findViewById(R.id.idGoodBye); buttonGoodBye.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { managerOfSound(goodbye); } // END onClick() }); // END buttonGoodBye } // END onCreate() protected void manageSound(String theText) { if (mp != null) { mp.reset(); mp.release(); } if (theText.equals(hello)) mp = MediaPlayer.create(this, R.raw.hello); else if (theText.equals(goodbye)) mp = MediaPlayer.create(this, R.raw.goodbye); else mp = MediaPlayer.create(this, R.raw.what); mp.start(); } 

Tomado de aquí: http://www.badprog.com/android-mediaplayer-example-of-playing-sounds

Además, recomiendo encarecidamente el uso de SoundPool en lugar de MediaPlayer, para un mejor rendimiento y facilidad de uso.

http://developer.android.com/reference/android/media/SoundPool.html

Por favor, también compruebe si su sonido está silenciado – sé que esto suena estúpido, pero sucede a los mejores de nosotros;)

Tienes que hacerlo así:

  try{ mp.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mp.start(); 

Asegúrese de que su reproducción sólo cuando el archivo ha terminado de prepararse.

  • Reproducción de audio de baja latencia en Android
  • ¿Cuál es la unidad de la amplitud devuelta del método getMaxAmplitude?
  • Reproductor de medios de Android: descargue a archivo y secuencia de archivo
  • Transferencia de datos mediante ultrasonido
  • Cómo combinar dos archivos mp3 en uno (combinar / unir)
  • Reproducir / grabar archivos .DSS o .DS2
  • Cómo configurar el archivo de audio como tono de llamada en Android?
  • Android: Cargando archivos MIDI personalizados de DLS en Sonivox EAS
  • AudioRecord y AudioTrack latency
  • Android ¿Cómo mezclar dos archivos de audio a un archivo de audio?
  • ¿Cómo obtener sólo frecuencia de audio y decibles del proyecto FFTBasedSpectrumAnalyzer?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.