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その場合は、headedのaudio処理を行わずに、出力ストリームに渡すだけです。AudioSystem.write()WAV

ここhttp://www.linuxcommand.org/man_pages/oggenc1.htmlによると、でRAW受け入れることができますoggenc

于 2012-12-08T14:23:13.807 に答える
0

AudioSystem.write メソッドを再実装すると、長さの問題を解決できるようになります。ヘッダーのデータ長のため、ストリームおよび WAVE 形式では動作しません。オーディオ データを何らかの配列に書き込んでから、正しい WAVE ヘッダーを準備する必要があります。例:オーディオをバイト配列に記録する方法

于 2016-08-28T09:59:23.813 に答える