在游戏中缓存.mid音频文件

时间:2013-05-06 17:38:29

标签: java caching audio inputstream

问题可能看起来很简单。我正在开发一个游戏项目,所以现在我需要实现一个声音引擎。

我有几个要播放的音频文件。我是这样做的:

File file = new File("music.mid");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();

目前我正在尝试缓存这些文件以通过HashMap提高性能:

private HashMap<String, File> cache = new HashMap(); //name - key & file - res

我在hashmap中检查一个文件,如果存在则将其取出并重复使用。

但是,每次我需要播放文件时,似乎仍然会下载音频资源。 (可能会再次生成输入流)

游戏每次都开始滞后。


您能否告诉我一种适当的缓存.mid文件的方法,以便在应用程序中快速访问和播放这些文件?

1 个答案:

答案 0 :(得分:1)

Java中的File对象实际上并不包含文件的内容,它只是文件的句柄。实际上,在Clip#open

之前不会读取该文件

大多数操作系统缓存通常将文件读取到RAM,因此在大多数情况下,您不需要自己执行此操作。如果您需要更多关于缓存的功能,请缓存Clip对象:

  

Clip接口代表一种特殊的数据线,其音频   数据可以在回放之前加载,而不是流式传输   实时。

例如,您可以将剪辑放在HashMap

HashMap<String, Clip> clips = new HashMap<String, Clip>();
for (String fileName: fileNames) {
    File file = new File(fileName);
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clips.put(fileName, clip);
}

clips.get("music.mid").start();