![](/img/trans.png)
[英]How to save more that one byte array using Java 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
傳遞到輸出流,而無需使用用於標題WAV
的AudioSystem.write()
進行處理
根據此處http://www.linuxcommand.org/man_pages/oggenc1.html的說明,您可以使用oggenc
接受RAW
。
如果重新實現AudioSystem.write方法,則可以解決長度問題。 由於標頭中的數據長度,它不適用於流和WAVE格式。 您應該將音頻數據寫入某個陣列,然后准備正確的WAVE標頭。 示例: 如何將音頻記錄到字節數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.