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:
- TextToSpeech versión de compilación android no reproduce audio
- Android MediaPlayer getCurrentPosition () hace que el audio tartamudea
- ¿Cómo grabo simultáneamente el audio de cada micrófono en una matriz de micrófonos en un buffer separado en Android?
- Calcular el nivel de sonoridad desde el micrófono en android
- Transferencia de datos mediante ultrasonido
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 ?
- Establecer el volumen máximo en Android
- Javax.sound.sampled.AudioInputStream para android
- Cómo detectar el perfil de audio AAC y garantizar la compatibilidad con Android
- PhoneGap plugin de Android para la grabación de audio de mayor calidad?
- Buffer de vídeo circular Android con sonido
- ¿Cómo leer los valores sin procesar de 3gp / AMR-NB formato de audio?
- Recibir audio vía Bluetooth en Android
- Silenciar el sonido global en Android
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.
- El ayudante emergente del menú no se puede utilizar sin ancla
- AppCompatSeekBar eliminación de relleno izquierdo y derecho?