2
我一直在努力嘗試修復我的程序。它一次成功播放一首歌曲,但不能重新播放歌曲。奇怪的是,當試圖創建一個簡短的自包含示例時,我發現相同的代碼可以播放歌曲,停止播放不同的歌曲,但不會連續播放同一首歌曲兩次。鑑於在我的應用程序,我不知道用戶是否會再次選擇同一首歌曲,因此流必須被關閉並重新打開。聲音不會播放兩次
下面是一個例子演示斷碼(不會再播放歌曲):
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import java.io.IOException;
public class test{
static Clip musicplayer;
static AudioInputStream currentSong;
public static void main(String[] args){
try{
musicplayer = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(new test().getClass().getResource("test.wav"));
playMusic(ais);
System.out.println("Playing Music");
Thread.sleep(4000);
stopMusic();
System.out.println("Stopping Music");
Thread.sleep(3000);
playMusic(ais);
System.out.println("Playing Music for the Second time");
Thread.sleep(5000);
System.out.println("Finished Program");
}catch(Exception ex){ex.printStackTrace();}
}
public static void playMusic(AudioInputStream music){
if(music == null)
return;
if(currentSong != null){
if(currentSong.equals(music))
return;
}
currentSong = music;
try {
musicplayer.setFramePosition(0);
musicplayer.stop();
musicplayer.open(currentSong);
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
musicplayer.loop(Clip.LOOP_CONTINUOUSLY);
}
public static void stopMusic(){
musicplayer.close();
}
}
如果我加入另一個的AudioInputStream,併發揮作爲我的第二首歌,它工作正常。
不,不起作用。當前歌曲字段只有在選擇了不同的歌曲或歌曲停止時纔會播放。您可以通過打印每個變量來檢查該方法以查看線程到達的位置。 – user2097804 2013-03-27 21:03:30
真正的解決方案是通過每次播放時重新加載聲音來解決它... :(我會接受你的答案,因爲將currentSong設置爲null可能對解決方案有所幫助 – user2097804 2013-03-27 21:21:53
BevynQ答案是正確的你認爲你做了一個「解決方法」,你不更新'currentSong'或者'music',它們是完全一樣的對象 – 2013-03-27 21:37:30