2012-12-08 26 views
0

試圖管的AudioInputStream我從libary這個過程有:的java的AudioInputStream AudioSystem.write管道長度誤差

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,但我找不到合適的長度。那麼如何指定長度?

+1

你的代碼在哪裏,它拋出了什麼確切的異常?什麼是'AudioFileFormat :: Type :: WAVE'?這不是Java語法。 – Dims

+0

我相信你,但沒有足夠的信息。實際上,如果您有正確的音頻流,則不需要指定長度。 – Dims

+0

我會嘗試粘貼任何我能找到的信息 – nurettin

回答

0

所以,我發現你正在閱讀audio從某個未知的地方,然後試圖將其寫入WAV格式。但WAV格式需要寫入標題,其中應包含文件長度。無論如何WaveFileWriter如果在不知道長度的情況下通過流傳送,則會拋出異常。

我想你的方向是Java -> oggenc

所以,你要學習oggenc並知道它是否接受無頭WAV流。如果是這樣,那麼就用AudioSystem.write()這是領導WAV小號

據此間http://www.linuxcommand.org/man_pages/oggenc1.html你能接受RAWoggenc通過你audio到輸出流,而不處理。

0

如果重新實現AudioSystem.write方法,您將能夠解決長度問題。由於標題中的數據長度,它不適用於流和WAVE格式。您應該將音頻數據寫入某個數組,然後準備正確的WAVE標題。例如:How to record audio to byte array