estoy usando un SoundPool para reproducir clips de audio en mi aplicación. Todo está bien, pero necesito saber cuándo ha finalizado la reproducción del clip.¿Cuál es la mejor forma de obtener una duración de archivo de audio en Android?
Por el momento lo sigo en mi aplicación obteniendo la duración de cada clip usando una instancia MediaPlayer. Eso funciona bien, pero parece un desperdicio cargar cada archivo dos veces, solo para obtener la duración. Pude calcular aproximadamente la duración, conociendo la longitud del archivo (disponible en el AssetFileDescriptor), pero aún necesito saber la frecuencia de muestreo y la cantidad de canales.
veo dos soluciones posibles a este problema:
- Averiguar cuando un clip ha terminado de jugar (no parece ser posible con soundclip).
- Tener una clase que podría cargar solo el encabezado de un archivo de audio y darme la frecuencia de muestreo/número de canales (y, idealmente, el recuento de muestras para obtener la duración exacta).
¿Alguna sugerencia?
Gracias, Max
El código que estoy usando en este momento (funciona bien, pero es bastante pesado para el propósito):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
// ...
}
En una nota lateral, esta cuestión ya ha sido asked pero no obtuve ninguna respuesta.
¿ha considerado un 'onCompletitionListener'? https://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html#onCompletion%28android.media.MediaPlayer%29 – sschrass
@SatelliteSD simplemente no funciona (nunca se llama) en ninguno de los dispositivos Yo tengo. Incluso si recibe una llamada en algunas versiones del sistema operativo/algunos dispositivos, no es confiable y, por lo tanto, inútil. – Gilead
ha verificado dos veces que se llama a 'setOnCompletitionListner' después de' .start() '? – sschrass