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



这个问题看起来很简单。我正在制作一个游戏项目,所以现在我需要执行一个声音引擎。

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

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();

最新更新