当前位置: 首页 > news >正文

【2013-10-09】Android AcousticEchoCanceler使用笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-10-09| 标题:Android AcousticEchoCanceler使用笔记分类:编程 / android |标签:android·ec·AcousticEchoCanceler


Android AcousticEchoCanceler使用笔记

    • AcousticEchoCanceler 使用方法
      • 1. 检查设备是否支持 AEC
      • 2. 初始化并启用 AEC
      • 3. 启用 / 禁用 AEC
      • 4. 释放 AEC
    • 上层调用方式(AudioRecord + AudioTrack)
      • 1. 初始化 AudioRecord 时处理音频源
      • 2. 获取 sessionId
      • 3. 初始化 AudioTrack 时绑定相同 sessionId
    • 总结

Android 在4.1(API level 16)新增了AcousticEchoCancelerAPI,继承自 AudioEffect,可快速实现 VOIP 场景下的回声消除。

官方文档:AcousticEchoCanceler

AcousticEchoCanceler 使用方法

1. 检查设备是否支持 AEC

注意:此检查结果不一定准确,需结合实际机型测试。

publicstaticbooleanisDeviceSupport(){returnAcousticEchoCanceler.isAvailable();}

2. 初始化并启用 AEC

privateAcousticEchoCancelercanceler;publicbooleaninitAEC(intaudioSession){if(canceler!=null){returnfalse;}canceler=AcousticEchoCanceler.create(audioSession);canceler.setEnabled(true);returncanceler.getEnabled();}

3. 启用 / 禁用 AEC

publicbooleansetAECEnabled(booleanenable){if(null==canceler){returnfalse;}canceler.setEnabled(enable);returncanceler.getEnabled();}

4. 释放 AEC

publicbooleanrelease(){if(null==canceler){returnfalse;}canceler.setEnabled(false);canceler.release();returntrue;}

上层调用方式(AudioRecord + AudioTrack)

AcousticEchoCanceler 初始化需要audioSessionId,以下是上层的配合方式。

1. 初始化 AudioRecord 时处理音频源

if(chkNewDev()){audioRecord=newAudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION,frequency,channelIN,audioEncoding,tmpSize);}else{audioRecord=newAudioRecord(MediaRecorder.AudioSource.MIC,frequency,channelIN,audioEncoding,tmpSize);}

2. 获取 sessionId

audioRecord.getAudioSessionId()

3. 初始化 AudioTrack 时绑定相同 sessionId

if(chkNewDev()&&audioRecord!=null){audioTrack=newAudioTrack(AudioManager.STREAM_VOICE_CALL,frequency,channelOUT,audioEncoding,tmpSize,AudioTrack.MODE_STREAM,audioRecord.getAudioSessionId());}else{audioTrack=newAudioTrack(AudioManager.STREAM_VOICE_CALL,frequency,channelOUT,audioEncoding,tmpSize,AudioTrack.MODE_STREAM);}

版本检查工具方法:

publicstaticbooleanchkNewDev(){returnandroid.os.Build.VERSION.SDK_INT>=16;}

所需权限:

<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>

总结

  1. AcousticEchoCanceler可快速实现 VOIP 回声消除,但各机型适配参差不齐,建议同时准备第三方方案(如 WebRTC AEC/AECM、Speex)。
  2. 上述代码基于官方文档编写,资料较少,不保证完整正确性。
http://www.jsqmd.com/news/1076905/

相关文章:

  • Prompt Injection攻击原理与三层纵深防御实战
  • SCF5250嵌入式存储通信:FlashMedia接口与DMA协同驱动实战
  • 游戏漏洞挖掘 | 网络安全教程:新手手游漏洞挖掘流程与实战案例详解
  • lxml:Python 处理 XML 和 HTML 的终极选择
  • 3步AI智能修复:让受损音频重获清晰的专业级解决方案
  • 告别iTunes臃肿:如何在Windows上快速安装苹果设备驱动
  • 苏州市市级企业技术中心的任务和目标,以及通过认定可享受的优惠政策
  • Autoruns v14.30更新:启动项排查更完整
  • 构建学术阅读操作系统:三阶锚点法与动态知识图谱
  • 【小白向】极简本地 AI 搭建思路,虾壳云一键部署 OpenClaw v2.7.9 零代码快速落地(最新安装包)
  • 蝉龙虾ChanClaw是什么?全域电商运营助手全解答
  • 在成本敏感型应用中,采用国产DD马达四轴转台替代进口谐波减速转台,其全生命周期的免维护成本和能效表现如何?
  • PolarDB MySQL版V2.0:100% 兼容 MySQL的国产自研数据库介绍
  • GEO工具“既当裁判又当运动员”,谁来保证数据真实?
  • 信息对偶性:从黎曼猜想到AI学习,构建统一的信息-几何-优化框架
  • 桥梁组件巡检数据集 桥梁构件病害YOLO目标检测数据集 桥梁数据集第10770期
  • 智能测距 DLC-1 设备应用风电场 探测技术优化电缆运维作业效率
  • 浅谈UDP协议
  • 捕蚊灯真的有用吗?室内灭蚊器哪个牌子好?2026精选高性价比灭蚊器汇总分享!任你选!
  • VMware ESXi 9.1 macOS Unlocker OEM BIOS 2.7 标准版和厂商定制版
  • 【编号332】(安徽省)滁州市基础地理矢量数据
  • 夹缝中的企业投融资部
  • 2026年AI模型接口中转站权威测评推荐榜单 全场景适配优质平台选购指南
  • LangChain 与 LangGraph 完全解析:从“流水线”到“智能流程图”
  • 量子随机基准测试:原理、挑战与应用实践
  • 作业帮智能辅导学习机靠谱吗?2026真实口碑测评
  • 香港科技大学(广州) | 生命科学与生物学工程学域博士生录取开放日报名召集!
  • AI到底能不能落地?是不是噱头?
  • 盲目考PMP的同学,如今你后悔了吗?
  • 鼎讯 DXL-400E,适配风电全周期验收、巡检、故障抢修工作