Android SDK MediaPlayer无法正确搜索

时间:2016-05-07 13:42:28

标签: android audio mp3 android-mediaplayer seektotime

我有一个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应用程序检查了主题(它用于Windows)。这两次都是正确的。

但在我的应用中,当我寻找MediaPlayer时,音频不会从我选择的位置开始。(时间正确,但声音不同。)

我认为MediaPlayer没有正确地寻求那个时间。所以我在播放之前通过调用getCurrentPosition()来检查当前位置,但是返回值并且搜索值相同。

我对此没有任何想法。

修改

我的问题不是时间转换。

我正确地转换并寻求到那里,但它发挥了那个时代没有预料到的东西。

这意味着KMPlayer和Android的时机不同。

我的问题是方式?如何解决?

2 个答案:

答案 0 :(得分:2)

您必须使用 MySQL equivalent of Oracle's SEQUENCE.NEXTVAL 方法。这需要毫秒作为时间偏移。你的偏移是你想要开始的距离,例如从开始1分钟可以是你的偏移。

  

注意:我的字符串就像这样:5:12.201(Mins Secs Millisecs)

如果您想寻找5:12.201之类的时间,请使用seekTo(312201);

解释

1000 ms为您提供一秒钟,因此 12000 为12秒, 60000 为1分钟。

如果您需要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)

答案 1 :(得分:1)

我通常使用这个功能。

我认为它可以帮到你。

 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;
}
祝你好运:)