【发布时间】:2016-05-07 13:42:27
【问题描述】:
我有一个 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中的时间是不同的。
我的问题是方法?和如何解决?
【问题讨论】:
-
这是 CBR 还是 VBR MP3 文件(恒定或可变比特率)?
-
如果您需要帮助以获得有效答案,您必须回复建议。如果您在播放后检查当前位置会发生什么?逻辑是检查它从现在开始播放的时间,甚至在开始播放之前不要关心检查的最后位置。
System.out.println对getCurrentPosition();的价值有何看法?如果您想寻找 5 分钟 12 秒和 201 毫秒,则应该是312201...此外,如果从互联网加载,请确保在寻找该时间之前 5 分钟可用(缓冲)。 -
PS:我之前测试过你的代码,它给出了正确的搜索值
312201。你得到什么数字来寻求更正时间但播放错误的音频部分?偏移量是多少错误的部分,比如它是在实际所需的寻道时间之前/之后播放 30 秒的音频吗?
标签: android audio mp3 android-mediaplayer seektotime