我想在我的游戏中播放背景中的音乐,所以我添加了MediaPlayer
,但我遇到了缓冲问题。当歌曲在后台播放时,每隔几秒就停一会儿。当歌曲停止时,磁盘突然旋转得更快,因此播放器可能同时加载文件。有没有办法强制玩家在播放之前加载整个媒体?或者是与Java无关的问题?其他媒体播放器正常播放文件。
以下是代码:
import java.io.File;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class GameMusic extends JFXPanel {
public GameMusic(String path){
Make_List(path);
Music();
}
private String[] List = new String[0];
private void Make_List(String dir){
File directory = new File(dir);
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
if(file.getName().toLowerCase().endsWith(".mp3".toLowerCase()) ) {
List = Arrays.copyOf(List, List.length+1);
List[List.length-1]=file.toURI().toASCIIString();
}
}
else if (file.isDirectory()) {
Make_List(file.getAbsolutePath());
}
}
}
private int x=0;
private MediaPlayer player = null;
private Random rn = new Random();
private boolean next = true;
private void Music() {
TimerTask CheckTime;
CheckTime = new TimerTask() {
@Override
public void run() {
if(next){
next = false;
x=rn.nextInt(List.length);
player = new MediaPlayer(new Media(List[x]));
player.play();
player.setOnReady(new Runnable() {
@Override
public void run() {
String title =(String)player.getMedia().getMetadata().get("title");
String artist = (String)player.getMedia().getMetadata().get("artist");
//those 2 lines are there to just show what song is currently playing
//Start.lt.setTitle("Console playing:"+title+" by "+artist);
//Start.lt.Prntl("Playing:"+title+" by "+artist);
}
});
}
double tt=player.getTotalDuration().toSeconds()-5;
double ct=player.getCurrentTime().toSeconds();
if(tt<=ct)
next =true;
}
};
Timer tmr = new Timer();
tmr.scheduleAtFixedRate(CheckTime, 0, 5000);
}
}
玩家只能使用此
正常运行GameMusic gm = new GameMusic(/* Directory with music files */);
我试图删除所有不需要播放文件的内容,但它仍然会暂停歌曲。
同样,当我在一年前编写代码时,iIt在文件位于internal drive
时工作得很好,现在我正在使用外部驱动器。这可能是个问题吗?
当我检查光盘使用情况时,它会保持在0%
,当播放器加载文件时,它会每隔几秒跳到70-100%
。当光盘使用量跳至100%
时,歌曲大部分停止。 有没有办法强制java加载它或加载更大的部分?或者只是硬盘故障?
我不是以英语为母语的人,我很难解释这个问题,如果不清楚的话,对不起。