最新消息:关注【已取消】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

webRTC中声音的AGC,ANS,AEC回声处理方法

Android 太平洋学习网 浏览 评论

Android webrtc中如何做到声音AGC麦克风自动调控,ANS背景噪音处理,以及AEC回音控制呢?在google的webrtc中其实都已经有了对应的处理方法,先了解声音AGC,ANS,AEC等的基本概念。

AGC是自动增益补偿功能(Automatic Gain Control),AGC可以自动调麦克风的收音量,使与会者收到一定的音量水平,不会因发言者与麦克风的距离改变时,声音有忽大忽小声的缺点。

ANS是背景噪音抑制功能(Automatic Noise Suppression),ANS可探测出背景固定频率的杂音并消除背景噪音,例如:风扇、空调声自动滤除。呈现出与会者清晰的声音。

AEC是回声消除器(Acoustic Echo Chancellor),AEC可以消除各种延迟的回声。

webrtc想要实现回声控制,噪音处理,声音补偿,可以参照下方的方法进行。

创建PeerConnectionFactory的时候,将AudioDeviceModule添加到PeerConnectionFactory:

private PeerConnectionFactory createPeerConnectionFactory () {
	AudioDeviceModule audioDeviceModule = JavaAudioDeviceModule.builder ( mContext )
			.setUseHardwareAcousticEchoCanceler ( false )
			.setUseHardwareNoiseSuppressor ( false )
			.createAudioDeviceModule ();
	PeerConnectionFactory.InitializationOptions initializationOptions = 
			PeerConnectionFactory.InitializationOptions.builder ( mContext )
			.createInitializationOptions ();
	PeerConnectionFactory.initialize ( initializationOptions );
	peerConnectionFactory = PeerConnectionFactory.builder ()
			.setAudioDeviceModule ( audioDeviceModule )
			.createPeerConnectionFactory ();
	return peerConnectionFactory;
}

创建PeerConnection对象:

public PeerConnection createPeerConnection() {
	PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(mIceLis);
	if (mFactory != null) {
		return mPeerConnectionFactory.createPeerConnection(rtcConfig, this);
	} else {
		return null;
	}
}

然后对本地语音流进行AGC,ANS,AEC处理,都设置为true即可:

private void createLocalStream () {
	WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor ( true );
	WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler ( true );
	WebRtcAudioUtils.setWebRtcBasedAutomaticGainControl ( true );
	MediaConstraints localMediaConstraints = new MediaConstraints ();
	AudioSource localAudioSource = peerConnectionFactory.createAudioSource ( localMediaConstraints );
	localTrack = peerConnectionFactory.createAudioTrack ( LOCAL_AUDIO_TRACK, localAudioSource );
	localTrack.setEnabled ( true );
	localMediaStream = peerConnectionFactory.createLocalMediaStream ( LOCAL_STREAM );
	localMediaStream.addTrack ( localTrack );
	peerConnection.addStream ( localMediaStream );
}
来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/1186.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论