gpt4 book ai didi

java - AudioInputStream java 上的随机访问

转载 作者:行者123 更新时间:2023-11-30 11:02:51 24 4
gpt4 key购买 nike

有随机访问AudioInputStream的例子吗?就像任何普通音频播放器一样 - 当您将小节带到任何您想要的地方并从任何地方播放时,我如何以这种方式访问​​音频流中的字节?

像这样简单的东西:read(byte[] buffer, long startingFrom) 其中 startingFrom 可以在音频流中我想要的任何地方

最佳答案

AudioInputStream 中使用(模拟?)随机访问与在普通 InputStream 中相同。您可以创建一个 mark()在文件的开头,因此在对 read() 的任何调用完成之前。然后,当你想做随机访问时,你停止从流中读取,通过调用 reset() 转到标记位置。然后使用 skip()去你想去的地方。

请注意,AudioInputStream 的初始“标记”默认为 0,因此不需要初始调用。但是,未指定此行为,因此将来可能会更改。

AudioInputStream (Oracle Java 8) 的实现支持这种机制,前提是底层流(例如您提供给构造函数的 InputStream)支持它。您可以通过调用 markSupported() 查看 AudioInputStream 是否支持它.

不幸的是,当使用 AudioSystem 中的实用函数创建 AudioInputStream 时,您无法影响底层流。它甚至可能因平台而异。如果您的流不支持它(或者您想绝对确定它支持它),您可以通过将一个流包装在 BufferedInputStream 中来创建一个新的 AudioInputStream。例如像这样:

AudioInputStream normalStream = AudioSystem.getAudioInputStream(...);
AudioInputStream bufferedStream = new AudioInputStream(new BufferedInputStream(normalStream),
normalStream.getFormat(), AudioSystem.NOT_SPECIFIED);

免责声明:我认为这具有创建随机访问的“技巧”。 令我惊讶的是,我几乎找不到关于使用 InputStream 中的标记/重置机制模拟随机访问的信息。这可能是因为它有一个警告。 编辑:John Skeet同意我的这种做法。

关于java - AudioInputStream java 上的随机访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com