2016-01-07 96 views
0

我正在監聽實時電話呼叫,並且能夠獲取原始PCM字節。 我也可以通過java的音頻API來收聽這些字節。 這些都適用於小程序。將PCM原始字節轉換爲WAV字節

現在我希望能夠將電話調用的原始PCM字節轉換爲WAV字節,以便我可以直接將其寫入ServletOutputStream。這將允許瀏覽器實際收聽電話。

有沒有人有任何想法我將能夠在飛行中將一些原始PCM字節[]轉換爲WAV字節[]?

我所見過的所有例子都屬於將文件轉換爲另一個文件。

java pcm to wav

How can I write a WAV file from byte array in java?

謝謝。

+0

您提供的兩個鏈接看起來像他們創造聲波頭是缺乏原始數據的有效解決方案。 –

+0

@ maxime.bochon:是的。但問題是這些解決方案確實與'文件'有關,而不是'原始'字節[]'。就我而言,我沒有wave標頭所需的數據長度與這些解決方案的建議相比。同樣,我只有一個實際電話的PCM字節以及該電話持續多久,我不知道。有沒有什麼方法可以將無限波文件實際傳輸到瀏覽器? 謝謝。 – Miki

+1

實際上,當我讀「能夠在飛行中轉換」時,我實際上擔心着什麼......我從來沒有讀過WAVE頭文件中的流模式。此外,如果我記得很清楚,WAVE文件的長度有限制。你的問題在應用層中比在格式化層中更多。 [Here](http://stackoverflow.com/questions/2551943/how-to-stream-a-wav-file)是一個與你相關的話題。 –

回答

0

我也陷入了完全相同的情況,這裏是我如何解決問題。

public static boolean getWavFile(String filePath, InputStream audioStream) throws IOException { 

    boolean result = false; 
    try { 

     byte[] decodedData = IOUtils.toByteArray(audioStream); 

     System.out.println(">>Decoded Data" + Arrays.toString(decodedData)); 
     File outFile = new File(filePath); 
     AudioFormat format = new AudioFormat(8000, 16, 1, true, false); 
     AudioSystem.write(new AudioInputStream(new ByteArrayInputStream(
       decodedData), format, decodedData.length), AudioFileFormat.Type.WAVE, outFile); 
     result = true; 
     return result; 
    } catch (IOException ex) { 
     System.out.println("<<getWavFile - impl" + ex); 
     return result; 

    } 
}