PDA

Ver la Versión Completa : ¿hacer que pare un sonido dandole de nuevo a un boton?


Davidwalter
23/10/13, 17:23:57
Buenas, estoy creando una aplicacion de botones con sonidos, y mi pregunta era,
¿Como hago para que, despues de haberle dado al boton y mientras suena el sonido, dandole de nuevo mientras se reproduce el sonido, en vez de empezar de nuevo pare el sonido?
El codigo para utilizar el sonido es este:
int miAudio = -1;
SoundPool sP;

//ahora en el onCreate
sP = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
Button miboton = (Button) findViewById(R.id.miboton);
setVolumeControlStream(AudioManager.STREAM_MUSIC);

try {
AssetManager assetManager = getAssets();
AssetFileDescriptor sound1 = assetManager.openFd("misonido.mp3");
miAudio = sP.load(sound1, 1);
}

miboton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sP.play(miAudio, 1.0f, 1.0f, 1, 0, 1);
}
});

¿que tendria que añadir?

kriogeN
23/10/13, 20:09:57
No puedes de forma directa con SoundPool, sólo con MediaPlayer. Porque con SoundPool no puedes saber si el sonido se está reproduciendo o no, y por tanto no puedes saber si tienes que llamar a "stop" o a "play".

La librería ideal sería la combinación de ambas.

Puedes hacer una "chapucilla", que aunque no sea muy precisa puede ser que te resuelva el problema:

1) Creas un objeto MediaPlayer con MediaPlayer.create del mismo sonido que quieres reproducir.

2) Obtienes su duración con getDuration()

3) Cuando haces click en el botón por primera vez estableces una variable al tiempo actual del sistema (System.currentTimeMillis())

4) Las sucesivas veces compruebas si la última vez que pulsaste el botón ha pasado menos tiempo que la duración del sonido, y en ese caso llamas a "stop". Si ya ha pasado el tiempo llamas a "play".

Los pasos 1 y 2 lo mejor es hacerlo al mismo tiempo que creas el SoundPool en el onCreate, y no cada vez que vas a reproducir el sonido. Porque si no pierdes la ventaja de usar SoundPool. Obviamente necesitarás tantas variables (de duración y de tiempo de la última vez) como sonidos tengas.

Y repito, no es muy preciso, ya que puede haber ligeras diferencias de tiempo, pero creo que te resolverá el problema.

EDITO: Recuerda cerrar los MediaPlayer después de obtener las duraciones.