2013-12-16 127 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(); 
    } 
} 

但我不確定這是否會奏效,或者只是一遍又一遍地播放聲音。