2013-12-16 129 views
3

好的,我试图在应用程序打开时让声音文件永远循环播放。这是目前我运行声音文件的一段代码。无法循环播放MP3文件

public class Game { 

    public static void main(String[] args) { 

     JFrame window = new JFrame("Josh's 2D College Project"); 
     window.setContentPane(new GamePanel()); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.pack(); 
     window.setVisible(true); 

     try{ 

      File file = new File("C:/Users/Josh Scott (Zinotia)/Desktop/2D College Project/Resources/Sounds/BGSong.mp3"); 
      FileInputStream fis = new FileInputStream(file); 
      BufferedInputStream bis = new BufferedInputStream(fis); 

      try{ 

       Player player = new Player(bis); 
       player.play(); 

      } catch(JavaLayerException ex) {} 

     } catch(IOException e){} 
    } 
} 

我正在使用JavaZoom的JavaLayer来播放Mp3文件。任何人都可能给我另一种方式来循环&使用声音文件以不同的方式或使用JavaLayer

+1

你好,请你看看(http://stackoverflow.com/a/17032994/824495) –

回答

2

给玩家添加一个Listener;

如果您使用AdvancedPlayer而不是播放器,则可以执行此操作。

AdvancedPlayer p = new AdvancedPlayer(bis) 
p.setPlayBackListener(new Playbacklistener(){ 

    //override unimplemented methods 
    @Override 
    public void playbackFinished(PlaybackEvent evt){ 
     p.start() 
    } 

    @Override 
    public void playbackStarted(PlaybackEvent evt){} 
}; 

注 - [这个答案]这是唯一的片段,你需要将它集成到你的代码...

1

首先,得到mp3文件的准确长度。然后第二个try语句里面添加while(true)和内部的添加

player.play(); 

,然后添加此

thread.Sleep(//mp3 length in milliseconds here) 

它应该是这样的:

try { 
    Player player = new Player(bis); 
    while(true) { 
     player.play(); 
     Thread.Sleep(69000); //length of mp3 here 
    } 
} 

您也可以尝试

try { 
    Player player = new Player(bis); 
    while(true) { 
     player.play(); 
    } 
} 

但我不确定这是否会奏效,或者只是一遍又一遍地播放声音。