簡體   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