0

尝试将我从库中获得的 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,但找不到合适的长度。那么如何指定长度呢?

4

2 回答 2

0

因此,我发现您正在audio从某个未知的地方阅读,然后尝试将其写入WAV格式。但是WAV格式需要写标题,其中应该包含文件长度。WaveFileWriter如果在不知道长度的情况下由流馈送,无论如何都会引发异常。

我猜你的方向是Java -> oggenc

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

根据这里http://www.linuxcommand.org/man_pages/oggenc1.html可以接受RAW.oggenc

于 2012-12-08T14:23:13.807 回答
0

如果您重新实现 AudioSystem.write 方法,您将能够解决长度问题。由于标头中的数据长度,它不适用于流和 WAVE 格式。您应该将音频数据写入某个数组,然后准备正确的 WAVE Header。示例:如何将音频录制到字节数组

于 2016-08-28T09:59:23.813 回答