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 格式的音频,未指定长度。我从库中得到了这个,所以我无法修改他们的代码。我尝试从这个流创建另一个音频输入流,但我找不到合适的长度。那么我该如何指定长度呢?

所以,我发现你正在从未知的地方阅读audio,然后尝试将其写入WAV格式。但是WAV格式需要写入标头,标头应包含文件长度。无论如何,如果由流馈送而不知道长度,WaveFileWriter会引发异常。

我想你的方向是Java -> oggenc.

因此,您将学习oggenc并知道它是否接受无头WAV流。如果是这样,那么只需将您的audio传递到输出流,而无需使用 AudioSystem.write() 进行处理,这是用于标题WAV

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

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

相关内容

  • 没有找到相关文章

最新更新