一些歌曲的media.getDuration().toSeconds()返回值为0

3
我已经编写了以下代码
Media hit = new Media(dir); 
MediaPlayer player = new MediaPlayer(hit);
runMedia run = new runMedia(player);
Ui.changeGuiTitle("Now playing: "+getLastBitFromUrl(dirUnencoded.toString()));
Ui.updateInitialTime(getTime(hit.getDuration().toSeconds()));

getTime方法:

System.out.println(time);
System.out.println(Math.round(time));
double seconds = Math.round(time);
double modulo = seconds % 60;
double hours = (seconds - modulo) / 3600;
double minutes = hours / 60;
String Time = "";

if (hours > 0.5)
{
    Time = Math.round(hours) + " : " + Math.round(minutes) + " : "  
    +   Math.round(seconds);
}
else
{
    Time = Math.round(minutes) + " : " + Math.round(seconds);
}
return Time;

没有报错,但我的问题是有些歌曲在 .getDuration().toSeconds() 返回 0,而其他歌曲则正常返回其值。这个问题可能是由什么引起的?

编辑: 在调试模式下,一首歌曲包含 136280.816326 毫秒...而 System.out.println(time) 返回 0

http://imgur.com/1oN0Vxk -- 调试版和正常编译版之间的差异


1
假设您正在使用MP3:难以计算VBR(可变比特率)编码歌曲的持续时间。请检查您的歌曲是CBR还是VBR。 - Dio F
Media类来自哪个库? - Stewart
@Dio F Windows资源管理器显示128kbps,VLC显示输入变化在126到-129 kbps左右。 - Kelevra
1
那么很可能是可变比特率(VBR)。我对此不是专家。我的唯一建议是检查不同的库,比如SoX,这可能会给出更好的结果。 - Dio F
如果我运行调试器,它可以完美地运行。 - Kelevra
1个回答

0

我也遇到了这个问题。在创建媒体对象后,它需要一些时间才能完全初始化(根据我的经验)。

你可以尝试在MediaPlayer的onReady或onPlaying方法中调用你的getTime方法。


非常感谢!我加了一个 thread.sleep(1000),这样它就能加载了,然后它就正常工作了! - Kelevra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接