我以字節讀取音頻文件,然後對音頻字節[]進行FFT(作爲低通濾波器),因此輸出FFT是實數和虛數的雙[]。 現在我想播放結果來聽到聲音。 如果我將播放一個字節[],我使用SourceDataLine。JAVA-如何播放音頻聲音表示爲float []或double []
所以問題是,我怎麼玩雙[]?
感謝,
薩默爾薩米
我以字節讀取音頻文件,然後對音頻字節[]進行FFT(作爲低通濾波器),因此輸出FFT是實數和虛數的雙[]。 現在我想播放結果來聽到聲音。 如果我將播放一個字節[],我使用SourceDataLine。JAVA-如何播放音頻聲音表示爲float []或double []
所以問題是,我怎麼玩雙[]?
感謝,
薩默爾薩米
我認爲最好的辦法是將其轉換回的byte []。
您可以使用ByteArrayOutputStream
和DataOutputStream
來做到這一點。
ByteArrayOutputStream
one允許將流的內容作爲字節數組進行檢索,DataOutputStream
允許您向流寫入雙精度值。
是的,DataOutputStream將允許我寫入文件,但它不會允許我直接播放它到揚聲器... –
其實我的意思是你可以寫入一個ByteArrayOutputStream,然後從中檢索一個字節數組。嘗試用數據輸出流包裝字節數組輸出流。然後,如果保留對包裝的ByteArrayOutputStream的引用,您將能夠以字節數組的形式檢索它。另請注意,ByteArrayOutputStream的內容將被放置在虛擬內存中,而不是放入文件中。 – Lynch
爲了擴大對@林奇的回答,這顯然是不適合的OP足夠清晰:
byteStream = new ByteArrayOutputStream();
dataStream = new DataOutputStream(byteStream);
// write each element of your double[] to dataStream
dataStream.close();
byteStream.close();
byte[] audioBytes = byteStream.toByteArray();
是的,我的意思是這個。有時通過示例更容易理解。 – Lynch
你有沒有解決這個問題?我意識到沒有人給你解決你的問題。 –