studio reproductor reproducir programacion para móviles musica mediaplayer fuente fondo desarrollo curso codigo aplicaciones android button audio

reproductor - reproducir mp3 android studio



forma más eficiente de reproducir un sonido cuando se hace clic en el botón (2)

En este momento tengo dos botones. Cada uno necesita producir un sonido diferente. En el futuro, probablemente habrá alrededor de 8 botones, pero por ahora solo dos.

public class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Button btnDrum1 = (Button) findViewById(R.id.btnDrum1); btnDrum1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(this, R.raw.drum1); mp.start(); mp.release(); } }); final Button btnCym1 = (Button) findViewById(R.id.btnCym1); btnCym1.setOnClickListener(new OnClickListener() { public void onClick(View v) { MediaPlayer mp = MediaPlayer.create(this, R.raw.cym1); mp.start(); mp.release(); } }); } }

Originalmente no tenía mp.release () y reproducía el sonido correctamente, pero finalmente la aplicación se bloqueaba debido a que se estaba quedando sin memoria. Ahora con el mp.release () no se cuelga, pero a veces no reproduce el sonido cuando se hace clic.

¿Es esta la manera más eficiente de reproducir un sonido cuando se hace clic en el botón? ¿Es extensible?


Creo que esto se debe a que lo liberas mientras está sonando. Cree un MediaPlayer global para cada sonido y utilícelo una y otra vez, libere cuando la actividad esté cerrada (quizás incluso cuando esté en pausa y vuelva a cargar en reanudar si los archivos de sonido son grandes). Además, como tendrá muchos botones, puede tener un solo onclicklistener en todos los botones que instaure en onCreate ():

private class MyMagicalOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: //play sound 1 break; case R.id.button2: //play sound 2 break; } } }

solo comenta y dime si no estás seguro de cómo implementar esto :)

editar: por solicitud, aquí hay una implementación ordenada que debería hacer maravillas con su aplicación. Lo hice para que la actividad se implemente en clicklistener, creo que es un poco más limpio.

public class Bluarg extends Activity implements OnClickListener{ MediaPlayer mp1; MediaPlayer mp2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mp1 = MediaPlayer.create(this, R.raw.sound1); mp2 = MediaPlayer.create(this, R.raw.sound2); final Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(this); final Button button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: mp1.start(); break; case R.id.button2: mp2.start(); break; } } @Override protected void onDestroy() { mp1.release(); mp2.release(); super.onDestroy(); } }


Si su aplicación tendrá más botones, debe usar SoundPool en lugar de MediaPlayer. Debido a que MediaPlayer arruinará tu aplicación de la memoria, ya no podrá reproducir el sonido.

¡Esto me ayudó! y creo que tú también jugarás sonido con SoundPool