news 2026/6/25 19:57:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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. 上述代码基于官方文档编写,资料较少,不保证完整正确性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 19:57:16

双5G护航智能出行,宏电H6700车载网关让智能网联稳定在线

一辆「稳定在线」的车&#xff0c;到底有多难&#xff1f;做车联网项目的工程师都懂——让一辆车「上网」不难&#xff0c;难的是让它「稳定在线」。救护车正通过5G回传患者生命体征&#xff0c;进隧道的那一刻信号断了&#xff1b;无人物流车正通过远程接管规避障碍&#xff0…

作者头像 李华
网站建设 2026/6/25 19:49:36

移动端安全测试:Burp Suite代理配置与HTTPS抓包实战指南

1. 项目概述&#xff1a;为什么要在手机上配置Burp Suite代理&#xff1f;作为一名长期与Web应用安全打交道的从业者&#xff0c;我几乎每天都会和Burp Suite打交道。它早已不是简单的“抓包工具”&#xff0c;而是渗透测试工程师和安全研究员的“瑞士军刀”。但很多朋友&#…

作者头像 李华
网站建设 2026/6/25 19:49:18

前端JS接口泄露引发的权限越权漏洞实战分析

1. 项目概述&#xff1a;一次由前端接口引发的权限风暴最近在复盘一些内部安全评估的案例时&#xff0c;一个典型的场景反复出现&#xff0c;让我觉得非常有必要拿出来聊聊。这个场景的核心&#xff0c;就是从看似无害的前端JavaScript接口入手&#xff0c;最终拿到了系统最高权…

作者头像 李华
网站建设 2026/6/25 19:48:19

正规的地牛神奇垫供应商哪家强

在工业生产与仓储物流领域&#xff0c;地牛等转运车辆的车轮清洁至关重要&#xff0c;它是维护工厂车间与无尘环境洁净度的“第一道防线”。地牛神奇垫作为清洁车轮的重要工具&#xff0c;选择一家正规的供应商十分关键。今天&#xff0c;我们就来探讨一下正规的地牛神奇垫供应…

作者头像 李华