給定一個名爲in
的InputStream
,其中包含壓縮格式(如MP3或OGG)的音頻數據,我希望創建一個包含輸入的WAV轉換的byte
數組數據。不幸的是,如果你嘗試這樣做,JavaSound給了你以下錯誤:將音頻流轉換爲Java格式的WAV字節數組,無臨時文件
java.io.IOException: stream length not specified
我設法得到它通過寫WAV到一個臨時文件,然後在回讀,工作,如下圖所示:
AudioInputStream source = AudioSystem.getAudioInputStream(new BufferedInputStream(in, 1024));
AudioInputStream pcm = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, source);
AudioInputStream ulaw = AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, pcm);
File tempFile = File.createTempFile("wav", "tmp");
AudioSystem.write(ulaw, AudioFileFormat.Type.WAVE, tempFile);
// The fileToByteArray() method reads the file
// into a byte array; omitted for brevity
byte[] bytes = fileToByteArray(tempFile);
tempFile.delete();
return bytes;
這顯然不太理想。有沒有更好的辦法?
我得試試看。在我嘗試之前可能會有一點點,所以目前我無法接受答案。不過,我會鼓勵它。 – 2008-10-21 22:43:00