在Mac OS X上停止后,Java音频剪辑不会继续循环

时间:2012-05-04 14:02:40

标签: java macos audio javasound

如果我开始使用loop(Clip.LOOP_CONTINUOUSLY)播放剪辑,它可以正常工作并无限循环。 但是,如果我用stop“暂停”它然后尝试再次开始循环,它只播放它之前播放的循环的剩余部分,并且不会继续循环。

据我所知,这只发生在OS X上(在Windows中可以正常工作)。

我做错了吗?从所有的Clip文档来看,它似乎并不像。

如果我在停止后将帧位置设置回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);
            }
        });
    }
}

0 个答案:

没有答案