Java缓存.wav失败

时间:2014-07-24 15:52:05

标签: java audio hashmap clip

我正在用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"。我再次重申,这段代码第一次播放声音,但从未播放过。

1 个答案:

答案 0 :(得分:1)

这是因为AudioClip对象从最后播放的帧播放。调用start时不会重置此项。

每次想要再次播放剪辑时,都需要重置它。

if (cache.containsKey(file)) {
    clip = cache.get(file);
    clip.setFramePosition(0);
}