这个问题可能看起来很简单。我正在开发一个游戏项目,所以现在我需要实现一个声音引擎。
我有几个要播放的音频文件。我这样做:
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
对象:
The Clip interface represents a special kind of data line whose audio data can be loaded prior to playback, instead of being streamed in real time.
例如,您可以将剪辑放置在 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();
关于java - 在游戏中缓存 .mid 音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404106/