Android SDK MediaPlayer не ищет правильно

У меня есть mp3-файл, и мое приложение должно искать какое-то выбранное время этого mp3-файла, а затем начать воспроизведение с него.

Я конвертирую время строки этим методом в значение 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;
} 

Примечание: мои укусы такие 5:12.201 это означает 5 минут и 12 секунд и 201 миллисекунду.

Я получил это время от MP3 Audio Editor приложение (это для Windows), и я проверил тему с KMPlayer приложение (это для окон). И эти времена были правильными для них обоих.

Но в моем приложении, когда я ищу свой MediaPlayer к тому времени звук не начинается с моей выбранной позиции. (время правильное, но звук другой.)


Я думал, что MediaPlayer не стремится к тому времени правильно. Поэтому я проверил текущую позицию, позвонив getCurrentPosition() перед игрой, но возвращаемое значение и искомое значение были одинаковыми.

Я понятия не имею об этом.


Редактировать:

Моя проблема не в преобразовании времени.

Я обращаюсь туда и стараюсь там правильно, но играю то, чего не ожидал в то время.

Это означает, что время в KMPlayer и Android различается.

Мой вопрос - это путь? и как это можно решить?

2 ответа

Вы должны стремиться с помощью seekTo метод. Это ожидает миллисекунды как смещение времени. Ваше смещение - это то, как далеко от начала вы хотите играть, например, 1 минута от начала может быть вашим смещением.

Примечание: мои строки такие: 5: 12.201 (Мин . Сек. : Миллисек).

Если вы хотите искать время как 5:12.201 затем используйте seekTo(312201);

Объяснил:

1000 мсек дают одну секунду, поэтому 12000 - 12 секунд, а 60000 - одна минута.

Если ты хочешь 5m:12s тогда делай как:

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)

Я обычно использую эту функцию.

Я думаю, что это может помочь вам.

 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;
}

Удачи:)

Другие вопросы по тегам