La forma correcta de reproducir sonidos cortos Android?

Estoy creando una aplicación que tendrá varias imágenes en la pantalla, estas imágenes serán los botones y cuando se pulsa reproducirá un sonido corto. Investigué esto y sólo podría encontrar el método actual que estoy usando para reproducir sonidos, que no parece responder a todos. Quiero que el sonido juegue rápidamente y responda a muchos golpes rápidos. No estaba seguro de si esto era posible en Android.

El código que estoy usando para reproducir mi sonido es el siguiente:

Button sound1; MediaPlayer firstSound; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click); sound1 = (Button) findViewById(R.id.Sound1); beaver.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { firstSound.start(); } }); } 

Mi problema de retraso también podría ser tal vez la forma en que estoy usando el objeto de reproductor de medios? Siento que esto debe ser más suave en mi teléfono, cualquier sugerencia sobre cómo reproducir sonidos en Android es apreciada.

Gracias.

Desde que descubrí Sound Pool, he editado mi código para usarlo y funciona perfectamente, el nuevo código se ve así:

 SoundPool soundPool; HashMap<Integer, Integer> soundPoolMap; int soundID = 1; Button sound1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); soundPoolMap = new HashMap<Integer, Integer>(); soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1)); sound1 = (Button) findViewById(R.id.bBeaver); sound1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); float leftVolume = curVolume/maxVolume; float rightVolume = curVolume/maxVolume; int priority = 1; int no_loop = 0; float normal_playback_rate = 1f; soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate); } }); } 

Gracias

Puede utilizar SoundPool . Se adapta perfectamente a lo que quieres hacer.

Sólo necesitará una forma de almacenar los ID de efectos de sonido correspondientes a cada imagen (o botón).

Quizás extienda el botón para almacenar el ID de efecto de sonido asociado. Y utilizar un SoundPool común para reproducir el efecto de sonido asociado a la identificación cuando se toca el botón.

Puedes leer más sobre SoundPool aquí .

@Rikonator está en el camino correcto con Soundpool. Es mucho más adecuado para el tipo de funcionalidad que está buscando.

Si decides ir con el reproductor multimedia de todos modos, no olvides el método prepareAsync () para evitar que cuelgue el subproceso de interfaz de usuario. Aquí puede leer más acerca de la reproducción de medios.

 MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); try { if (mp.isPlaying()) { mp.stop(); mp.release(); mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); } mp.start(); } catch (Exception e) { e.printStackTrace(); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.