我让AcousticEchoCanceler为我尝试过的所有其他设备类型的VoIP调用服务,但在任何三星设备上都没有。该设备报告AcousticEchoCanceler可用,但它什么也不做。
我得到的是:
acousticEchoCanceler.setEnabled(true);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
AudioTrack
的音频会话ID<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
有人让AcousticEchoCanceler在三星设备上工作吗?
发布于 2017-12-08 08:22:28
我最近也有同样的问题。对我来说,最重要的部分是在创建audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION)之前使用AudioRecord。
接下来,用以下内容创建AudioRecord:
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, mSamplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, audioRecordBufferSize);
最后创建并启用NS和AEC:
mNoiseSuppressor = NoiseSuppressor.create(mAudioRecord.getAudioSessionId());
if (mNoiseSuppressor != null) {
int res = mNoiseSuppressor.setEnabled(true);
}
mAcousticEchoCanceler = AcousticEchoCanceler.create(mAudioRecord.getAudioSessionId());
if (mAcousticEchoCanceler != null) {
int res = mAcousticEchoCanceler.setEnabled(true);
}
AudioTrack不需要与AudioTrack相关联到相同的音频会话ID (我认为应该自动完成)。
发布于 2017-10-12 04:51:13
几年前,我试过这段代码,并记住它是有效的。不能说它将如何与最新的设备。
int audioSource = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
int sampleFreq = 16000;
int numChannels = 1;
int numBytesPerSample = 2;
int channelConfig = numChannels == 1 ? AudioFormat.CHANNEL_IN_MONO : AudioFormat.CHANNEL_IN_STEREO;
int audioFormat = numBytesPerSample == 2 ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
int bufSize = AudioRecord.getMinBufferSize(sampleFreq, channelConfig, audioFormat);
if (bufSize == AudioRecord.ERROR_BAD_VALUE || bufSize == AudioRecord.ERROR) {
return;
}
AudioRecord audioInRecord = new AudioRecord(audioSource, sampleFreq,
channelConfig, audioFormat, bufSize);
if (audioInRecord.getState() != AudioRecord.STATE_INITIALIZED) {
return;
}
boolean aecAvailable = AcousticEchoCanceler.isAvailable();
if (aecAvailable) {
AcousticEchoCanceler instance;
if((instance = AcousticEchoCanceler.create(audioInRecord.getAudioSessionId())) != null) {
instance.setEnabled(true);
Log.d(TAG, "AEC enabled");
} else {
Log.d(TAG, "AEC disabled");
}
}
发布于 2017-10-09 04:41:54
试试以下几行:
if (AcousticEchoCanceler.isAvailable() && WebRtcAudioUtils.isAcousticEchoCancelerSupported()) {
WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);
WebRtcAudioUtils.useWebRtcBasedAcousticEchoCanceler();
}
https://stackoverflow.com/questions/46560814
复制相似问题