Java MediaPlayer每隔几秒就停止播放

时间:2015-05-27 20:00:34

标签: java audio javafx media-player

我想在我的游戏中播放背景中的音乐,所以我添加了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加载它或加载更大的部分?或者只是硬盘故障?

我不是以英语为母语的人,我很难解释这个问题,如果不清楚的话,对不起。

0 个答案:

没有答案