是否有随机访问 AudioInputStream 的示例?就像任何普通的音频播放器一样——当你把酒吧带到你想要的任何地方并从你想要的任何地方播放时,我怎样才能以这种方式访问音频流中的字节?
像这样简单的东西:read(byte[] buffer, long startingFrom)
startFrom 可以是音频流中我想要的任何位置
是否有随机访问 AudioInputStream 的示例?就像任何普通的音频播放器一样——当你把酒吧带到你想要的任何地方并从你想要的任何地方播放时,我怎样才能以这种方式访问音频流中的字节?
像这样简单的东西:read(byte[] buffer, long startingFrom)
startFrom 可以是音频流中我想要的任何位置
在 an 中使用(模拟?)随机访问AudioInputStream
与在 normal 中相同InputStream
。您可以在文件的开头创建一个mark()
,以便在read()
完成任何调用之前。然后,当您想要进行随机访问时,您停止从流中读取,通过调用转到标记位置reset()
,然后使用skip()
转到您想要的位置。
请注意,初始 'mark' 将默认为 0 AudioInputStream
,因此不需要初始调用。但是,未指定此行为,因此将来可能会更改。
AudioInputStream
如果底层流(例如InputStream
您提供给构造函数的流)支持此机制,则(Oracle Java 8)的实现支持它。您可以通过调用来查找是否AudioInputStream
支持它markSupported()
。
不幸的是,当使用实用程序函数AudioSystem
创建时,AudioInputStream
您无法影响底层流。它甚至可能因平台而异。如果您的流不支持它(或者您想绝对确定它确实支持它),您可以AudioInputStream
通过将一个包装在BufferedInputStream
. 例如像这样:
AudioInputStream normalStream = AudioSystem.getAudioInputStream(...);
AudioInputStream bufferedStream = new AudioInputStream(new BufferedInputStream(normalStream),
normalStream.getFormat(), AudioSystem.NOT_SPECIFIED);
免责声明:我认为这有一个“黑客”来创建随机访问。令我惊讶的是,我几乎找不到使用编辑:John Skeet同意我对这种方法的看法。InputStream
. 这可能是因为有一个警告。