Reputation: 2289
In some mobile devices(like Motorola One Power - Android 10, Redmi Note 5 Pro - Android 7.1.2), sound from the phone speaker is going into the conference through the phone mic and causes an echo. This echo issue is coming only when the Phone Speaker is in the ON state.
I have used MODE_IN_COMMUNICATION mode of AudioManager:
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
Also, used below audio constraints to create Audio Source by using createAudioSource() API of PeerConnectionFactory:
audioConstraints = new MediaConstraints();
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googHighpassFilter", "true"));
audioConstraints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
Any help or guidance in resolving the issue will be well appreciated.
Upvotes: 11
Views: 3411
Reputation: 216
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true)
WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true)
Upvotes: 0
Reputation: 1102
Android AudioManager it provides access to volume and ringer mode control.
First of all find out whether microphone is on or off using isMicrophoneMute()
method.
the find out all the connected audio devices with the help getDevices()
which will help to figure out which mic user want to mute
Once you detect targeted mic, Sets the microphone mute using setMicrophoneMute()
Upvotes: 0
Reputation: 2289
Some phones can't do hardware echo cancellation, even though they advertise it's available. Redmi Note 5 is definitely one of them, take a look at https://github.com/signalapp/Signal-Android/blob/master/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java, search for HARDWARE_AEC_BLACKLIST. So, to enable WebRTC AEC, use below methods of JavaAudioDeviceModule.class
setUseHardwareAcousticEchoCanceler(false)
setUseHardwareNoiseSuppressor(false)
(For reference, please have a look into createJavaAudioDevice() of PeerConnectionClient.java - Checkout official android example on googlesource.com
Upvotes: 5