sonido - Android SoundPool: recibe notificaciones cuando finalice el juego
soundpool ejemplo (4)
Este sonido es tan simple que no puedo entender por qué no puedo encontrar la respuesta jajaja
Tengo una clase de grupo de sonido que funciona (gracias a un tutorial y algunos ajustes que hice), y funciona bien.
el problema ahora es que quiero poder cambiar mi música de fondo al azar. (No siempre tiene la misma música en un bucle, pero tiene 2 o 3 y cuando uno termina, toco uno de los otros 2).
El problema es que no puedo encontrar una manera de recibir una notificación de que la música ha terminado de reproducirse.
Algunas ideas ?
Jason
Esto es lo que hago:
Al iniciar , obtengo la duración de cada clic de sonido usando un MediaPlayer:
private long getSoundDuration(int rawId){
MediaPlayer player = MediaPlayer.create(context, rawId);
int duration = player.getDuration();
return duration;
}
y almacene el sonido más la duración juntos (en un objeto de tipo DTO).
MediaPlayer es pesado y lento en comparación con SoundPool, pero SoundPool no tiene setOnCompletionListener. Para hacer frente a este problema, implementé una clase personalizada de SoundPool con setOnCompletionListener.
uso: similar a MediaPlayer
creación:
SoundPoolPlayer mPlayer = SoundPoolPlayer.create(context, resId);
mPlayer.setOnCompletionListener(
new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) { //mp will be null here
Log.d("debug", "completed");
}
};
);
mPlayer.play();
pausa:
mPlayer.pause();
detener:
mPlayer.stop();
currículum:
mPlayer.resume();
está jugando:
mPlayer.isPlaying();
cualquier solicitud de extracción es bienvenida. Solo implementé lo que necesito aquí.
No se puede hacer con SoundPool por lo que puedo decir.
El único ''reproductor'' de audio que conozco que puede proporcionar una notificación de finalización es MediaPlayer ; es más una bestia compleja que SoundPool, pero permite configurar un OnCompletionListener para que sea notificado cuando se complete la reproducción.
Tengo más de 100 clips de sonido cortos y SoundPool es mi mejor opción. Quiero reproducir un clip justo después de que otro clip termine de reproducirse. Al encontrar que no hay un equivalente de onCompletionListener (), elegí implementar un ejecutable. Esto me funciona porque el primer sonido dura entre 1 y 2 segundos, así que tengo la duración del set ejecutable en 2000. ¡Espero que funcionen en esta clase porque tiene un gran potencial!