我用插座一些語音數據發送到另一臺電腦,我用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
我可以在哪裏檢查靜音抑制設置?通過使用ais = AudioSystem.getAudioInputStream(PCMFormat,ais)時由jdk構建的隱式編解碼器?因爲如果是這樣,這可能是問題,因爲我使用該命令和發佈鏈接(已編輯)的算法,並且它們之間可能存在差異。但是我不能丟棄它們中的任何一個,因爲第一個是強制性的,我還需要外部算法來執行其他操作。你的java代碼中的 –
是否指定了相同的編解碼器?如果不是,可能會涉及到一些默認的編解碼器,因此有一些自動轉換。 – frhack
是的,我指定AudioFormat.Encoding.ALAW與上面發佈的所有設置。就像你所說的,似乎激活了語音激活檢測,但爲什麼只用於ALAW而不用於ULAW?我該如何停用它? –