繁体   English   中英

java AudioInputStream 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传递到输出流,而无需使用用于标题WAVAudioSystem.write()进行处理

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM