如何完全加载音频但稍后播放?
How to completely load audio but play it later?
所以,我有一个 AudioInputStream
,它从 FileInputStream
读取。我想关闭 FileInputStream
这将关闭 AudioInputStream
.
有什么方法可以完全加载音频,这样我就不必直接从文件中流式传输它了吗?
您可以将其存储在 Java Clip
.
示例:
Clip clip = AudioSystem.getClip();
clip.open(/*your AudioInputStream*/);
将 clip 设为一个字段,以备后用。
如果你想要一个 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()));
}
所以,我有一个 AudioInputStream
,它从 FileInputStream
读取。我想关闭 FileInputStream
这将关闭 AudioInputStream
.
有什么方法可以完全加载音频,这样我就不必直接从文件中流式传输它了吗?
您可以将其存储在 Java Clip
.
示例:
Clip clip = AudioSystem.getClip();
clip.open(/*your AudioInputStream*/);
将 clip 设为一个字段,以备后用。
如果你想要一个 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()));
}