我正在用Java建造一架钢琴。我有多个应该播放的片段,为了节省RAM,我决定将它们存储在HashMap中供以后使用。但这失败了,它只播放一次,仅播放一次。我做错了什么?
来源:
//imports etc.
HashMap<String, Clip> cache = new HashMap<String, Clip>(); //defined as global variable, before the constructor
public void play(String file) {
Clip clip = null;
AudioInputStream audio = null;
if (cache.containsKey(file)) {
clip = cache.get(file);
} else {
audio = AudioSystem.getAudioStream(getClass().getResource("/res/sounds/" + file + ".wav"));
clip = AudioSystem.getClip();
clip.open(audio);
cache.put(file, clip);
}
clip.start();
}
注意:String file
只是.wav的名称,例如"C4"
或"F#5"
。我再次重申,这段代码第一次播放声音,但从未播放过。
答案 0 :(得分:1)
这是因为AudioClip
对象从最后播放的帧播放。调用start
时不会重置此项。
每次想要再次播放剪辑时,都需要重置它。
if (cache.containsKey(file)) {
clip = cache.get(file);
clip.setFramePosition(0);
}