繁体   English   中英

剪辑第二次不播放声音

[英]Clip not playing sound a second time

我有播放声音的方法。 它第一次起作用,但是在第二次播放中我听不到声音。 首先,我在构造函数中实例化了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) {
        }
}

我第一次听到音频,但第二次没有。 为什么?

尝试先关闭Clip

clip.close();

也许每次在play()方法的开头尝试获取Clip之前每次都获取一个新的AudioInputStream吗?

含义尝试在方法的开头添加以下行:

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

尝试以下操作:将Clip设置为实例变量(并设为私有)。 初始化剪辑时,使其处于打开状态。

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

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

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

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

关于close()之后是open()的想法:

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

当您确定不再要调用该剪辑时,就该关闭该剪辑了。

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

很多人只能“ kinda”阅读(或阅读但不理解),因为很多人会感到困惑,并在每次播放时尝试初始化并打开一个剪辑,这确实效率很低。 直到整个数据文件都已加载到内存中,播放才会开始,这会增加不必要的延迟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM