2015-05-19 75 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())); 
}