【问题标题】:Java caching .wav failsJava 缓存 .wav 失败
【发布时间】:2014-07-24 15:52:05
【问题描述】:

我正在用 Java 制作钢琴。我有多个应该播放的剪辑,为了节省 RAM,我决定将它们存储在 HashMap 中以备后用。但这失败了,它只播放一次,只播放一次。 Ia 做错了什么?

来源:

//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"。我再重复一遍,这段代码第一次播放声音,但以后再也没有。

【问题讨论】:

  • 第一次播放声音,之后再也没有。不清楚你是怎么做到的?
  • 我有一个按钮可以调用具有特定键名的函数。

标签: java audio hashmap clip


【解决方案1】:

这是因为 AudioClip 对象从最后播放的帧开始播放。这不会通过调用 start 来重置。

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

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

【讨论】:

  • 很高兴提供帮助 :) 如果有帮助,请不要忘记 accept the answer :)
  • @MarijanSmetko AFAIK 接受答案没有声誉限制。您只需在发布问题后等待 15 分钟即可接受答案
  • 我的错,我正在考虑完全不同的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2012-03-28
  • 2020-01-07
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多