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