如何完全加载音频但稍后播放?
问题描述:
所以,我有一个AudioInputStream
,它从FileInputStream
读取。我想关闭FileInputStream
,这将关闭AudioInputStream
。如何完全加载音频但稍后播放?
有什么办法可以完全加载音频,这样我就不必直接从文件中流式传输了吗?
答
您可以将其存储在Java Clip
中。
实施例:
Clip clip = AudioSystem.getClip();
clip.open(/*your AudioInputStream*/);
制作剪辑的字段,后面使用它。
+0
男人,我是否愚蠢。我知道剪辑,但我从来没有想过使用它们。非常感谢。还不能完全接受这个答案 –
答
如果你想要一个AudioInputStream
,您可以在一个字节数组加载整个文件:
static AudioInputStream load(File file) throws IOException {
try (FileInputStream in = new FileInputStream(file)) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
for (int b; (b = in.read(buf)) > -1;) {
bytes.write(buf, 0, b);
}
return AudioSystem.getAudioInputStream(
new ByteArrayInputStream(bytes.toByteArray());
}
}
或者在Java 7中:
static AudioInputStream load(File file) throws IOException {
return AudioSystem.getAudioInputStream(
new ByteArrayInputStream(Files.readAllBytes(file.toPath()));
}
音频文件可真够大的 - 你确定你想缓存在RAM中? –
是的,我正在制作一个库来管理资产,我已经设置好从文件加载资产,然后关闭文件输入流。图像文件也可能非常大,我也会对它们做同样的事情。 –
Youu可以将文件读入内存,然后在内存缓冲区顶部创建一个ByteArrayInputStream并从中播放音频。 –