【发布时间】:2021-01-22 14:42:56
【问题描述】:
Android 版本:10 Android 设备:OnePlus 6
我曾尝试使用 AudioManager 中的 sessionID 应用 Java AudioEffect,从 LINK 获得帮助,但在使用 AcousticEchoCanceler.create(sessionId) 时我总是得到空指针异常;但是当我传递 Java AudioRecord getAudioSessionId() 的 sessionId 时,它可以工作。
我的代码是:
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 和 Motorola one Macro 上尝试过此代码
【问题讨论】:
-
在您的 C 代码中,
sessionId的类型是什么? -
另外,如果您在 C++ 中使用
recordingBuilder.setSessionId(SessionId::Allocate)创建录制流,然后调用recordStream->getSessionId,然后将其传递给AudioEchoCanceller.create,会发生什么情况?这应该在 C++ 中而不是在 Java/Kt 中分配会话 ID -
是的,我已经检查了我创建并从 JAVA 传递到 C++ 的 sessionID 工作正常。我已经通过记录 recordStream->getSessionId 进行了检查,它与 JAVA 相同。我已经解决了这个问题,并会为任何被卡住的人发布答案