私は自分のプログラムを修正するために何日も働いてきました。一度曲を再生することはできますが、その曲を再再生することはできません。
奇妙なことに、自己完結型の短い例を作成しようとすると、同じコードで曲を再生し、停止してから別の曲を再生できますが、同じ曲を 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 を追加して、それを 2 番目の曲として再生すると、問題なく動作します。