剪辑不再播放声音

时间:2014-05-09 20:01:30

标签: java audio javasound

我有一种播放声音的方法。它第一次工作,但在第二次播放时我听不到声音。 首先,我在构造函数中实例化了AudioInputStream:

private AudioInputStream audio;

public AudioTest() {
        try {
            audio = AudioSystem.getAudioInputStream(new File(PATH).getAbsoluteFile());
        } catch (UnsupportedAudioFileException | IOException e) {
        }

}

播放声音的方法:

private void play() {
        try {
            Clip clip = AudioSystem.getClip();
            clip.open(audio);
            clip.setFramePosition(0); 
            clip.start();     
        } catch (LineUnavailableException | IOException e) {
        }
}

我第一次听到音频而不是第二次听到音频。为什么呢?

3 个答案:

答案 0 :(得分:0)

首先尝试关闭Clip

clip.close();

答案 1 :(得分:0)

也许在AudioInputStream方法开头的Clip之前,每次尝试获取新的play()

意思是尝试在方法的开头添加此行:

audio = AudioSystem.getAudioInputStream(new File(PATH).getAbsoluteFile());

答案 2 :(得分:0)

试试这个:让你的Clip成为一个实例变量(并且是私有的)。初始化Clip时,将其保持打开状态。

对于播放剪辑的方法,只做以下两件事:(1)将帧位置或微秒位置移回0,(2)调用剪辑的start()方法。

不要重新初始化。不要关闭。不要重新打开。

你看过Clip的规格吗? 关于open()方法:

  

在已经打开的行上调用此方法是非法的   可能会导致IllegalStateException。

关于close()后跟open()的想法:

  

请注意,某些线条一旦关闭,就无法重新打开。尝试去   重新打开这样的行将始终导致LineUnavailableException。

如果您确定不再调用剪辑,那就是关闭()剪辑的时间。

Java教程可能更清晰,但这里也是他们的链接: http://docs.oracle.com/javase/tutorial/sound/playing.html

很多人只能“有点”阅读(或阅读并不理解)因为很多人感到困惑并尝试初始化并在每次播放时打开剪辑,这实在是效率低下。在将整个数据文件加载到内存之前,甚至不会开始播放,这会增加不必要的延迟。