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:
- Cómo agregar efecto de eco a archivo wav en android?
- En las preferencias, selecciona mi sonido como con RingtonePreference
- Adición de efectos de audio personalizados al reproductor de audio de Android
- Android: graba audio que se está reproduciendo desde el dispositivo a la toma de auriculares
- ¿Es necesario que el búfer AudioTrack esté lleno siempre en modo de transmisión?
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 ?
- Establece Atributos de audio en la clase SoundPool.Builder para API 21
- ¿Es Android 2.2 HTTP streaming progresivo = HTTP Live Streaming?
- Cómo extraer muestras de PCM de la salida del decodificador de MediaCodec
- Android WebView reproducir audio con javascript
- ToneGenerator bloquea Android
- Generar y reproducir sonido dinámicamente (a partir de datos de frecuencia / amplitud)
- PhoneGap plugin de Android para la grabación de audio de mayor calidad?
- El tipo mime de la salida de grabación de audio se establece como video
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?