问题描述
我知道这是一个已经被问到的问题,但我无法得到答案
我找到了这种播放声音的方式:
Clip sound = AudioSystem.getClip();
sound.open(AudioSystem.getAudioInputStream(new File("path/to/sound")));
sound.start();
但问题是我在游戏循环中运行这段代码,我想以某种方式构造它,这样我就不需要每次都从输入中读取声音,但已经将声音保存在内存中,所以我不必每次都加载它。
我尝试做这样的事情:
Clip sound = AudioSystem.getClip();
sound.open(AudioSystem.getAudioInputStream(new File("path/to/sound")));
while(true)
{
sound.start();
}
也喜欢这个
AudioStream audiostream = AudioSystem.getAudioInputStream(new File("path/to/sound"));
while(true)
{
Clip sound = AudioSystem.getClip();
sound.open(AudioSystem.getAudioInputStream(audiostream));
sound.start();
}
但它不起作用,或者它只起作用1次
解决方法
创建实例变量是个好方法。
要再次播放声音,首先将帧位置设置为第 0 帧或毫秒。 play() 方法总是从声音停止的地方开始。
因此:
while(true) {
sound.setFramePosition(0);
sound.play();
...
}
可以使用 start 开始和停止音频剪辑的播放 和停止方法。这些方法不会重置媒体位置;开始 导致从上次播放的位置继续播放 停了下来。从剪辑音频的开头重新开始播放 数据,只需使用 setFramePosition(0) 跟随停止调用, 将媒体倒回到剪辑的开头。