问题可能看起来很简单。我正在开发一个游戏项目,所以现在我需要实现一个声音引擎。
我有几个要播放的音频文件。我是这样做的:
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
文件的方法,以便在应用程序中快速访问和播放这些文件?
答案 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();