クリップの再生を開始すると、loop(Clip.LOOP_CONTINUOUSLY)
問題なく動作し、無期限にループします。ただし、「一時停止」してstop
からループを再開しようとすると、以前に再生していたループの残りの部分のみが再生され、ループは続行されません。
これは、私が知る限り、OS X でのみ発生します (Windows では問題なく動作します)。
私は何か間違ったことをしていますか?すべてのクリップのドキュメントから、それはそうではないように見えました。
停止後にフレーム位置を 0 に戻すと、クリップはループしますが、それは目的の効果ではありません (元の場所から再開します)。
SSCCE:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;
public class LoopSound {
public static void main(String[] args) throws Exception {
//borrowed from http://stackoverflow.com/tags/javasound/info
//the sound will not continue to loop on mac os x
//it does continue looping correctly on ms windows
URL url = new URL(
"http://pscode.org/media/leftright.wav");
final Clip clip = AudioSystem.getClip();
// getAudioInputStream() also accepts a File or InputStream
AudioInputStream ais = AudioSystem.
//getAudioInputStream( new File("filename") );
getAudioInputStream( url );
clip.open(ais);
// loop continuously
clip.loop(-1);
SwingUtilities.invokeLater(new Runnable() {
boolean isPlaying = true;
public void run() {
JFrame window = new JFrame("test");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JToggleButton button = new JToggleButton("sound toggle");
button.setSelected(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if(isPlaying){
clip.stop();
}else{
clip.loop(-1);
}
isPlaying = !isPlaying;
}
});
window.add(button);
window.pack();
window.setVisible(true);
}
});
}
}