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