2017-03-27 145 views
1

我想要做的是我通過TargetDataLine類捕獲來自麥克風的音頻,使用套接字發送它並通過SourceDataLine在另一側播放。問題是,麥克風我與捕捉,只支持:Java轉換音頻格式

AudioFormat format = new AudioFormat(48000, 16, 1, true, true); 

和我玩到揚聲器,只支持:

AudioFormat format = new AudioFormat(32000, 16, 2, true, true); 

當我直接拿到48kHz的,並把它推到32khz audioformat,聲音是傾斜的,有什麼辦法可以將48khz單聲道的聲音轉換成32khz的立體聲?

回答

0

如果Java有一些內置的音頻文件格式轉換,您可以在音頻教程主題的「Using Files and Format Converters」文章中瞭解它。

如果有需要手動完成,檢查出的第一個代碼示例在該網頁上,尤其要注意點與評論

// Here, do something useful with the audio data that's 
    // now in the audioBytes array... 

如果您並行運行的輸入和輸出線,可以使用線性插值從48000行獲取數據並將其發佈到32000行。比例是3:2。

因此,對於輸入中的3個PCM數據點,計算輸出的2個PCM數據點。

對於輸入,您將發送[0]到[0]並將1/2和[2]/2中的和發送到1

複製從單聲道轉換爲立體聲的值。