java AudioInputStream AudioSystem.write到管道长度错误

时间:2012-12-08 13:53:56

标签: java jruby processbuilder javax.sound.sampled

尝试将从libary获取的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,但我找不到合适的长度。那我怎么指定长度呢?

2 个答案:

答案 0 :(得分:0)

因此,我发现您正在从未知的地方阅读audio,然后尝试将其写入WAV格式。但WAV格式需要编写标题,标题应包含文件长度。无论如何WaveFileWriter如果在不知道长度的情况下被流喂养则抛出异常。

我猜你的方向是Java -> oggenc

所以,你要学习oggenc并知道它是否接受无头WAV流。如果是这样,那么只需将audio传递给输出流,而无需使用AudioSystem.write()处理WAV

根据此处http://www.linuxcommand.org/man_pages/oggenc1.html,您可以RAW接受oggenc

答案 1 :(得分:0)

如果重新实现AudioSystem.write方法,您将能够解决长度问题。由于标头中的数据长度,它不适用于流和WAVE格式。您应该将音频数据写入某个阵列,然后准备正确的WAVE标头。示例:How to record audio to byte array