2015-06-27 20 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?我该如何停用它? –

相关问题