Android SDK MediaPlayer no busca correctamente
Tengo un archivo mp3 y mi aplicación debe buscar a algún tiempo seleccionado de ese archivo mp3 a continuación, comenzar a jugar desde allí.
Convertir mi tiempo de cadena por este método a valor int
- android forma más rápida de decodificar mp3 a los datos de pcm
- ¿Cómo puedo convertir audio .mp3 a .m4a mediante programación en android
- Descargar un archivo sin extensión desde un servidor
- Aplicación de Android que extrae datos de volumen y / o frecuencia de un flujo de mp3
- Creación de una instancia sencilla de ExoPlayer
private static int convert(String time) { int quoteInd = time.indexOf(":"); int pointInd = time.indexOf("."); int min = Integer.valueOf(time.substring(0, quoteInd)); int sec = Integer.valueOf(time.substring(++quoteInd, pointInd)); int mil = Integer.valueOf(time.substring(++pointInd, time.length())); return (((min * 60) + sec) * 1000) + mil; }
Nota: mis picaduras son como esto 5:12.201
que significa 5 minutos y 12 segundos y 201 milisegundos.
Conseguí estas veces desde la aplicación MP3 Audio Editor
(es para Windows) y revisé el tema con la aplicación KMPlayer
(es para windows). Y estos tiempos eran correctos en ambos.
Pero en mi aplicación cuando busco mi MediaPlayer
a esa hora, el audio no se inicia desde mi posición seleccionada. (El tiempo es correcto pero el sonido es diferente).
Pensé que el MediaPlayer
no busca a esa hora correctamente. Así que he comprobado la posición actual llamando a getCurrentPosition()
antes de jugar, pero el valor devuelto y el valor buscado era el mismo.
No tengo ninguna idea al respecto.
Editar:
Mi problema no es tiempo de conversión.
Me convierto y busco a que correctamente, pero jugar algo que no se espera en ese momento.
Significa que el tiempo en KMPlayer y Android son diferentes.
Mi pregunta es ¿Cómo? Y ¿Cómo puede solucionarlo?
- Android equivelent al programa de afiliados de iTunes, api de streaming de música y participación de beneficios
- Precisión de MediaPlayer.seekTo (int msecs)
- Cómo mezclar / superponer dos archivos de audio mp3 en un archivo mp3 (no concatenar)
- ExoPlayer y comandos start / pause / seekTo
- ¿Cómo diseñar interacción servicio-actividad para un simple reproductor de mp3?
- El archivo Mp3 no se reproduce después de convertir desde byte android
- Android muestra sólo mp3 con ACTION_GET_CONTENT
- Mejor manera de recuperar MetaData de Mp3s en Android
Debe buscar utilizando el método seekTo
. Esto espera milisegundos como compensación de tiempo. Su desplazamiento es la distancia desde el principio que desea jugar, por ejemplo 1 minuto desde el inicio puede ser su compensación.
Nota: mis cadenas son como esto 5: 12.201 (Mins : Secs : Millisecs)
Si desea buscar un tiempo como 5:12.201
, utilice seekTo(312201);
Explicación :
1000 ms le da un segundo, así que 12000 es 12 segundos, y 60000 es un minuto.
Si quieres 5m:12s
tiempo entonces haz lo siguiente:
MyMins = 1000 * 60 * 5; //# 5 mins at 60 secs per minute MySecs = 1000 * 12; //# 12 secs MyMilliSecs = 201; //# 201 millisecs SeekValue = (MyMins + MySecs + MyMilliSecs); seekTo(SeekValue); //# seeks to 312201 millisecs (is == 5 min & 12 secs & 201 ms)
Usualmente uso esta función.
Creo que puede ayudar a usted.
public static String milliSecondsToTimer(long milliseconds){ String finalTimerString = ""; String secondsString = ""; int hours = (int)( milliseconds / (1000*60*60)); int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60); int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000); if(hours > 0){ finalTimerString = hours + ":"; } if(seconds < 10){ secondsString = "0" + seconds; }else{ secondsString = "" + seconds;} finalTimerString = finalTimerString + minutes + ":" + secondsString; return finalTimerString; }
Buena suerte 🙂
- Barra de herramientas flotante con controles de selección de texto
- Android: Obtener el nombre de archivo de la cámara?