首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java AudioEffect不使用双簧管?

为什么Java AudioEffect不使用双簧管?
EN

Stack Overflow用户
提问于 2021-01-20 05:48:20
回答 1查看 186关注 0票数 1

安卓版本:10个安卓设备: OnePlus 6

我尝试过使用来自AcousticEchoCanceler.create(sessionId);的sessionID应用Java AudioEffect,从AudioManager获得帮助,但是在使用AudioManager时总是会得到Null指针异常,但是当我传递sessionId of Java AudioRecord getAudioSessionId()时,它会工作。

我的守则是:

代码语言:javascript
复制
 val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
 val sessionId = audioManager.generateAudioSessionId()

C代码是

代码语言:javascript
复制
 recordingBuilder.setSessionId(static_cast<oboe::SessionId>(sessionId));
  oboe::Result recordStreamResult = recordingBuilder.openStream(&recordStream);

我在OnePlus 6和摩托罗拉one Macro上尝试过这个代码。

EN

回答 1

Stack Overflow用户

发布于 2021-01-22 06:42:56

我已经解决了一个问题:为什么我的AcousticEchoCanceler.create(sessionId)返回null,即使它是可用的。

这是代码

代码语言:javascript
复制
  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就开始工作。从这里您可以启用或禁用它。

代码语言:javascript
复制
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稳定

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65803739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档