2015-06-27 24 views
0

我用插座一些語音數據發送到另一臺電腦,我用ALAW這個「設置」發送之前編碼我的數據:爲什麼阿勞產生噪聲和ULAW不

AudioFormat.Encoding.ALAW, 
8000.0f  // sampleRate 
8,    // sampleSizeInBits 
1,    // channels 
1,    // frameSize 
8000.0f,  // frameRate 
false);  // bigEndian 

的問題是,它當我在麥克風上什麼都不說話時,會在接收器端產生一個很小(但非常煩人)的噪音。當我說話時,噪音幾乎消失,但不完全。

當我更改爲ULAW(完全相同的「設置」)時,噪聲根本不存在,聲音非常清晰。

我能做些什麼嗎?是否有推薦的設置與ALAW一起使用?我真的需要堅持ALAW,因爲ULAW會在代碼中造成一些混亂(並且需要進行太多的修改)。

備註:我打印了緩衝區,沒有與麥克風講話,它有很多8,-1,8,-1,8,0,8,0類型的圖案。我試圖強制所有8變成0,但仍然沒有太大的差異。我嘗試過,因爲在ULAW中,當我不說話而不是8時,有許多0的ALAW。我所說的這種模式是在發送用聲卡播放之前從(轉換ALAW到PCM)PCM。 我把轉換算法,從這裏,如果它是很重要的:ALAW PCM Conversions

回答

1

檢查靜音抑制設置。並且請確保沒有一些隱含的編解碼器轉換。

A律VS U形法A律和u律是被在修改用於數字化的輸入信號中使用兩種算法。這些算法在全世界的電話系統中都實現了 。這兩個算法的算法有一個相當小的差異,大多數人不知道 的區別。兩者之間的第一個區別是輸出的動態範圍爲 ; U律的動態範圍大於 的A律。動態範圍基本上是可以在信號中表示的最安靜和最響亮的聲音之間的比率。具有更高動態範圍的 的缺點是小信號失真更大。 這就是說,當聲音輸入非常柔和時,A律會比U律好。

瞭解更多:A律和U律之間的區別| |之間的區別A律vs u律http://www.differencebetween.net/technology/difference-between-a-law-and-u-law/#ixzz3eIfw2LtV

+0

我可以在哪裏檢查靜音抑制設置?通過使用ais = AudioSystem.getAudioInputStream(PCMFormat,ais)時由jdk構建的隱式編解碼器?因爲如果是這樣,這可能是問題,因爲我使用該命令和發佈鏈接(已編輯)的算法,並且它們之間可能存在差異。但是我不能丟棄它們中的任何一個,因爲第一個是強制性的,我還需要外部算法來執行其他操作。你的java代碼中的 –

+0

是否指定了相同的編解碼器?如果不是,可能會涉及到一些默認的編解碼器,因此有一些自動轉換。 – frhack

+0

是的,我指定AudioFormat.Encoding.ALAW與上面發佈的所有設置。就像你所說的,似乎激活了語音激活檢測,但爲什麼只用於ALAW而不用於ULAW?我該如何停用它? –

相關問題