我用插座一些语音数据发送到另一台电脑,我用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?我该如何停用它? –