标签(空格分隔): Android Echo-Cancellation


什么是回音

回音分为两种:

  • 声学回音(Acoustic Echo)
  • 线路回音(Line Echo)

目前我们只讨论声学回音;声学回音是由于在免提或者会议应用中,扬声器的声音多次反馈到麦克风引起的;

回音消除原理

原理是,在发送时,把不需要的回音从语音流中间去掉;
对于一个混合了两个声音的语音流,要把他们分开,去掉其中一个,这个非常困难;所以,实际应用上,除了这个已经混合好的信号,我们是可以得到产生回音的原始信号,然后基于回音的原始信号,在混合信号中将回音信号剥离出来。

Android做回音消除的关键点

Android在4.1(API level 16)中增加了AcousticEchoCanceler
官方介绍在AcousticEchoCanceler(请自备梯子)
要启用回音消除的使用过方式如下:

prvivate void enableAcousticEchoCanceler() {mAcousticEchoCanceler = AcousticEchoCanceler.create( mPlayer.getAudioSessionId() );if( mAcousticEchoCanceler.isAvailable() ) {// enable echo cancellermAcousticEchoCanceler.setEnabled( true );}
}

回音消除需要和采集声音配合在一起,我们使用AudioRecord

audioRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, frequency, channelIN, audioEncoding, tmpSize);

初始化好audioRecord之后,可以得到session id

audioRecord.getAudioSessionId();

初始化AudioTrack时,也需要额外的处理sessionId

udioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, frequency, channelOUT, audioEncoding, tmpSize, AudioTrack.MODE_STREAM,audioRecord.getAudioSessionId());

需要申请的权限有

  • RECORD_AUDIO
  • MODIFY_AUDIO_SETTINGS

总结如下:

  1. 要测试Echo Cancel的效果,需要一边从microphone采集声音,一边用speaker进行声音播放;
  2. 播放声音时,注意要使用speaker,而不是耳机;
  3. 需要RECORD_AUDIO, MODIFY_AUDIO_SETTINGS两个权限的申请;
  4. 根据stackoverflow上的解释,需要在16K采样率,以及AudioManager.setMode( AUdioManager.MODE_IN_COMMUNICATION)下,回音消除效果最好;
    AudioTrack create的时候,一定要加Record的session id,在nexus5上实测,加和不加的效果差异非常大;(meizu Pro6不明显)

Sample Code

整理以后放到github。

其他

Android的AcousticEchoCanceler有机型适配的问题,第三方的回音消除程序有:

  • WebRTC中的AEC/AECM
  • speex

ref

http://silversand.blog.51cto.com/820613/166095
https://item.congci.com/-/content/android-huisheng-xiaochu-acousticechocanceler

回音消除原理解析及Android应用相关推荐

  1. Android 广播实现原理解析

    Android 广播实现原理解析 前言 Android四大组件中的BroadcastReceiver,在我们实际工作中被频繁的使用,我们可以利用系统的开机广播,网络状态改变的广播等等实现我们的业务逻辑 ...

  2. android speex AEC 回音消除

    android speex AEC 回音消除. 有时候喇叭声音会被mic录制进去,就会产生回音数据,这是非常让人头疼的,所以去回音在音视频应用中非常重要. 现在主流的回音消除手段有android自带a ...

  3. 论android等平台回音消除解决方案

    来源 http://www.qttaudio.com/android-aec.html 回声消除介绍 http://www.baike.com/wiki/%E5%9B%9E%E9%9F%B3%E6%B ...

  4. 开源 基于Android的SIP电话-----Speex 回音消除 在android 平台

    我的毕业论文题目是: 基于Android的移动VoIP高清视频通话系统的设计与实现 可以去CNKI下载察看,希望对大家有帮助 搞了将近一个月的时间,将Speex的编码和解码做好了,发现还不错. 参考A ...

  5. Android之Butterknife原理解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 Butterknife是一个专注于Android系统的View注入框架, ...

  6. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  7. Android代码入侵原理解析(一)

    Original 2017-05-06 付超红 滴滴安全应急响应中心 2017年初,在滴滴安全沙龙上,滴滴出行安全专家--付超红,针对App的攻与防进行了分享.会后大家对这个议题反响热烈,纷纷求详情求 ...

  8. Android 插件化原理解析——Hook机制之AMSPMS

    在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook:插件框架通过AOP实现了插件使用和开发的透明性.在讲述DroidPlugin如何实现四大组件的插件 ...

  9. 爱加密Android APk 原理解析

    转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...

最新文章

  1. 将编译器pass添加到Relay
  2. Elasticsearch 在互联网公司大量真实的应用案例
  3. 8、Kubernetes核心技术Service
  4. 2019展望:超级智能崛起,人类智慧与机器智能将深度融合
  5. 2019.07.11
  6. ARM64的启动过程之(二):创建启动阶段的页表
  7. 阿里云天池发布完整开源数据集!实测可下!
  8. iOS 10 消息推送(UserNotifications)秘籍总结(二)
  9. Hibernate(三) - hibernate 表操作-多对多配置
  10. Virtual Studio 2013 每次加载程序(dll)缓慢的问题
  11. xamarin_如何实现声明性Xamarin表单验证
  12. MDK、keil复制中文注释乱码
  13. Android字数限制的EditText实现方案研究
  14. 在mathtype中怎么打出花体字母
  15. eyoucms相关问题总结
  16. 管家婆物流配货单快速实现批量拣货
  17. 初探直播客户端(android)技术
  18. 如何下载透明底校徽校名、企业logo,无需抠图
  19. JS实现右键拖动元素
  20. maxcompute-入门-环境安装

热门文章

  1. Linux 系统学习
  2. 在职校学计算机有好的出路吗,如何学好计算机(在职校学计算机有出路吗)
  3. php计算多少小时多少分钟多少秒
  4. Unity灯光渲染之光照探针
  5. 【vivado学习六】 Vivado综合
  6. LCP 63 弹珠游戏
  7. 什么是redis?redis如何使用?
  8. linux远程取证,铁三Linux取证(示例代码)
  9. 使用python,目前最全的Python使用手册
  10. brackets 快捷键 有大用