2015-05-19 74 views
0

所以,我有一個AudioInputStream,它從FileInputStream讀取。我想關閉FileInputStream,這將關閉AudioInputStream如何完全加載音頻但稍後播放?

有什麼辦法可以完全加載音頻,這樣我就不必直接從文件中流式傳輸了嗎?

+1

音頻文件可真夠大的 - 你確定你想緩存在RAM中? –

+0

是的,我正在製作一個庫來管理資產,我已經設置好從文件加載資產,然後關閉文件輸入流。圖像文件也可能非常大,我也會對它們做同樣的事情。 –

+1

Youu可以將文件讀入內存,然後在內存緩衝區頂部創建一個ByteArrayInputStream並從中播放音頻。 –

回答

1

您可以將其存儲在Java Clip中。

實施例:

Clip clip = AudioSystem.getClip(); 
clip.open(/*your AudioInputStream*/); 

製作剪輯的字段,後面使用它。

+0

男人,我是否愚蠢。我知道剪輯,但我從來沒有想過使用它們。非常感謝。還不能完全接受這個答案 –

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