安卓版本:10个安卓设备: OnePlus 6
我尝试过使用来自AcousticEchoCanceler.create(sessionId);的sessionID应用Java AudioEffect,从AudioManager获得帮助,但是在使用AudioManager时总是会得到Null指针异常,但是当我传递sessionId of Java AudioRecord getAudioSessionId()时,它会工作。
我的守则是:
val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val sessionId = audioManager.generateAudioSessionId()C代码是
recordingBuilder.setSessionId(static_cast<oboe::SessionId>(sessionId));
oboe::Result recordStreamResult = recordingBuilder.openStream(&recordStream);我在OnePlus 6和摩托罗拉one Macro上尝试过这个代码。
发布于 2021-01-22 06:42:56
我已经解决了一个问题:为什么我的AcousticEchoCanceler.create(sessionId)返回null,即使它是可用的。
这是代码
val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val sessionId = audioManager.generateAudioSessionId()
//This is the line that enables AEC, when MODE is set
audioManager.mode = AudioManager.MODE_IN_COMMUNICATION 当模式显式设置为MODE_IN_COMMUNICATION时,AcousticEchoCancelation就开始工作。从这里您可以启用或禁用它。
val isAecAvailable = AcousticEchoCanceler.isAvailable()
val acousticEchoCanceler = AcousticEchoCanceler.create(sessionId)
acousticEchoCanceler.enabled = true //THIS ENABLED THE AEC
if (acousticEchoCanceler != null)
Log.e(TAG, "AEC STATUS: ${acousticEchoCanceler.enabled}")
else
Log.e(TAG, "AEC IS NULL")目前,我正在使用双簧管版本: 1.5稳定
https://stackoverflow.com/questions/65803739
复制相似问题