所以,我有一個AudioInputStream
,它從FileInputStream
讀取。我想關閉FileInputStream
,這將關閉AudioInputStream
。如何完全加載音頻但稍後播放?
有什麼辦法可以完全加載音頻,這樣我就不必直接從文件中流式傳輸了嗎?
所以,我有一個AudioInputStream
,它從FileInputStream
讀取。我想關閉FileInputStream
,這將關閉AudioInputStream
。如何完全加載音頻但稍後播放?
有什麼辦法可以完全加載音頻,這樣我就不必直接從文件中流式傳輸了嗎?
您可以將其存儲在Java Clip
中。
實施例:
Clip clip = AudioSystem.getClip();
clip.open(/*your AudioInputStream*/);
製作剪輯的字段,後面使用它。
男人,我是否愚蠢。我知道剪輯,但我從來沒有想過使用它們。非常感謝。還不能完全接受這個答案 –
如果你想要一個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並從中播放音頻。 –