Android es la forma más rápida de cargar y reproducir sonido en la aplicación

Estoy trabajando en un proyecto en el que tengo que cargar 6 sonidos diferentes en una actividad y reproducir todo el sonido en el botón de clic.El archivo de sonido no son tan grandes, pero el problema es que tal vez será más. Que es la forma más rápida de cargar archivos de sonido en una sola actividad. Para fines de prueba he utilizado res / raw carpeta para almacenar los archivos de sonido y probado con dos métodos diferentes para reproducir los archivos, pero el resultado no me satisfizo. Dos tipos diferentes de código:

Método 1:

Button first = (Button) findViewById(R.id.one); Button second = (Button) findViewById(R.id.two); first.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumtwo); mp.start(); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mp.release(); } }); } }); second.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumone); mp.start(); mp.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mp.release(); } }); } }); 

Método 2:

  private SoundPool spool; private int soundID,soundID2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setVolumeControlStream(AudioManager.STREAM_MUSIC); spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); soundID = spool.load(this, R.raw.drumone, 1); soundID2 = spool.load(this, R.raw.drumtwo, 1); Button three = (Button) findViewById(R.id.three); three.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Sound(); } }); } public void Sound(){ AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); spool.play(soundID, volume, volume, 1, 0, 1f); }; 

Pero el problema es que los dos métodos son lentos .. Necesito encontrar una forma de una forma más rápida de reproducir los sonidos .. pero ahora hay como casi un segundo después de que haga clic en el botón para reproducir el sonido.

¿Puedes darme algún consejo sobre cómo reproducir el sounda más rápido. Debería cargarlos en una memoria caché cuando la aplicación se inicia o guardarlos en la base de datos o en otro lugar (no creo que la base de datos sea una buena opción, de hecho, pero Quiero escuchar algunas sugerencias). O tal vez cargarlos de la carpeta de activos, pero creo que todavía va a ser lento.

¿Alguna idea o sugerencia? ¡Gracias por adelantado!

Usted podría crear los reproductores multimedia en su onCreate y luego los botones sólo les hará jugar. Eso sería la solución más fácil, diría yo.

Alternativamente, dependiendo de lo importante que sea para usted y la cantidad de trabajo que desea hacer, podría considerar el uso de JetPlayer:

Aquí está la página de desarrollo de android para los medios:
http://developer.android.com/guide/topics/media/index.html

La página de la clase JetPlayer:
http://developer.android.com/reference/android/media/JetPlayer.html

Y la página sobre la creación de los archivos JET:
http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html

Si implementó esto probablemente funcionaría mejor, pero definitivamente sería el trabajo más.

JetPlayer básicamente le permite tener un archivo de audio (creo que es un archivo MIDI) con varias pistas que silenciar y unmute como le plazca. No tengo experiencia personal con él y acabo de leer algunos documentos, pero parece que sería muy útil para cualquier situación con más de un sonido.

Editar: Además, vale la pena mencionar esta lista de correo y en caso de que el vínculo siempre cambia esta búsqueda de google en caso de que alguien está interesado en temas de audio android.

Si desea tener el menor retraso debe utilizar OpenSL en c + +, De jelly bean es el reproductor de sonido más rápido

SoundPool está funcionando bien, puedes ver un ejemplo con el proyecto Hexiano . Sin embargo, debe precargar los sonidos en SoundPool, ya que tarda mucho tiempo en decodificar el archivo y almacenarlos en memoria antes de poder utilizarlos. Pero una vez que los sonidos se cargan, no hay demora notable entre la pulsación de teclas y la salida de sonido.

  • ¿Por qué mis sonidos SoundPool no se reproducen simultáneamente en onClick ()?
  • MediaPlayer de Android setNextMediaPlayer () alternativa
  • La muestra 1 no está lista - Soundpool en Android 2.1
  • Cómo sincronizar sonidos con SoundPool
  • Reproducir sonido utilizando el ejemplo de grupo de sonidos
  • ¿Cómo sé si se ha terminado de reproducir un sonido en android?
  • Saber si la carga de un sonido con SoundPool ha tenido éxito en Android 1.6 / 2.0 / 2.1
  • Android: grabación de la salida SoundPool
  • Y otra vez sobre problemas de memoria con SoundPool
  • Soundpool no está en bucle en Android 4.3
  • Problemas de desbordamiento de tamaño de montón con clips de sonido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.