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

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?

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 🙂

  • Cómo codificar un WAV a un mp3 en un dispositivo Android
  • Cómo cambiar el bitrate del archivo de audio a 32kbps en android
  • Error de MediaPlayer de Android: Error de MediaPlayer (1, -2147483648) en Stream de Internet
  • Lectura de mp3 desde archivo de expansión
  • ¿Cómo puedo reproducir un mp3 sin descargar desde la url?
  • Cómo obtener la duración de un archivo MP3 en Android
  • Archivo de selección de archivos de Android
  • Lame MP3 Encoder compilar para Android
  • ¿Cómo puedo descargar el archivo mediante webview? (Este caso es raro)
  • ExoPlayer AudioTrack Tartamudez
  • Raw no se puede resolver o no es un campo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.