[英]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.