![](/img/trans.png)
[英]How to save more that one byte array using Java AudioSystem.write
[英]java AudioInputStream AudioSystem.write to pipe length error
尝试通过管道将我从库获取的AudioInputStream传递给此过程:
oggenc - -o wtf.ogg
通过
AudioSystem.write(audio, AudioFileFormat::Type::WAVE, process.getOutputStream());
给我错误:
IOException
stream length not specified
file: com.sun.media.sound.WaveFileWriter.write(WaveFileWriter.java)
line: 129
因此,似乎需要指定音频流的长度。 这是未指定长度的44.8 kHz立体声PCM格式音频。 我是从图书馆获得的,因此无法修改其代码。 我尝试从此流创建另一个AudioInputStream,但找不到合适的长度。 那么如何指定长度呢?
因此,我发现您正在从未知的地方读取audio
,然后尝试将其写入WAV
格式。 但是WAV
格式需要写入标头,其中应包含文件长度。 无论如何,如果WaveFileWriter
在不知道长度的情况下由流提供, WaveFileWriter
引发异常。
我猜你的方向是Java -> oggenc
。
因此,您将学习oggenc
并确定它是否接受无头的WAV
流。 如果是这样,则只需将audio
传递到输出流,而无需使用用于标题WAV
的AudioSystem.write()
进行处理
根据此处http://www.linuxcommand.org/man_pages/oggenc1.html的说明,您可以使用oggenc
接受RAW
。
如果重新实现AudioSystem.write方法,则可以解决长度问题。 由于标头中的数据长度,它不适用于流和WAVE格式。 您应该将音频数据写入某个阵列,然后准备正确的WAVE标头。 示例: 如何将音频记录到字节数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.