c++ 为什么Java AudioEffect不支持双簧管?

njthzxwz  于 2023-05-08  发布在  Java
关注(0)|答案(1)|浏览(158)

**Android版本:**10
**Android设备:**一加6

我试着从AudioManager中使用sessionID来应用Java AudioEffect,从这个LINK中获得帮助,但是当使用AcousticEchoCanceler.create(sessionId)时,我总是得到NullPointerException,但是当我传递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 6Motorola One Macro上尝试了此代码。

ni65a41a

ni65a41a1#

我已解决以下问题:为什么我的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稳定

相关问题