Android应用开发-回声消除AEC

Android应用开发-回声消除AEC

基本流程:例化AudioRecord进行录音,保存音频文件为pcm格式;然后例化AudioTrack进行播放;

1.VOICE_COMMUNICATION

AudioRecord参数配置:

将AudioRecord的MediaRecorder.AudioSource.MIC参数修改成MediaRecorder.AudioSource.VOICE_COMMUNICATION

AudioManager参数配置:

录音开始前:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);

录音结束后:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(false);

权限配置:

注意:保存在应用程序内部存储,不需要申请外部读写权限;

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

2.WebRTC

(1)直接导入WebRTC官方aar,无法使用

在项目的build.gradle中添加

`implementation 'org.webrtc:google-webrtc:1.0.32006'`

在工程的settings.gradle中添加jcenter(),保证依赖库可以下载;

jcenter()
mavenCentral()

(2)原因

因为官方aar封装了audioRecord,所以无法进行本地音频保存;需要修改WebRTC源码库然后重新编译或者去网上找已经编译好的库直接使用;

(3)参考链接

https://juejin.cn/post/7036956266752639012 《Android端WebRTC本地音视频采集流程源码分析》
https://www.jianshu.com/p/6030ee4b64c3 《android 用WebRTC做回音消除》

3.Speex

没有测试过;

4.AcousticEchoCanceler

首先通过AcousticEchoCanceler.isAvailable()判断手机是否支持;

创建android.media.AudioRecord 的对象的时候,可以通过这个对象获取到一个audio session 的ID(获取的方法:getAudioSessionId()),这个ID的话在创建AcousticEchoCanceler的时候用到(创建对象:AcousticEchoCanceler.create(audioSessionId)),最后播放音频的时候(这里是用AudioTrack播放)传入这个ID就行。

实测:虽然oppo手机显示支持,但是没有效果;

总结

第一种方式更方便简单;通用性更强;

相关推荐

  1. Android应用开发-回声消除AEC

    2024-05-11 01:28:09       42 阅读
  2. 第9课 回声抑制(AEC+AGC+ANS)的实现

    2024-05-11 01:28:09       68 阅读
  3. 为什么要用Qt开发Android应用

    2024-05-11 01:28:09       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 01:28:09       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 01:28:09       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 01:28:09       82 阅读
  4. Python语言-面向对象

    2024-05-11 01:28:09       91 阅读

热门阅读

  1. 设计模式——迭代器模式(Iterator)

    2024-05-11 01:28:09       30 阅读
  2. MySQL环境搭建

    2024-05-11 01:28:09       34 阅读
  3. 产业链图谱在优化供应链管理中的作用

    2024-05-11 01:28:09       35 阅读
  4. Channel实现Flutter与原生平台之间的双向通信

    2024-05-11 01:28:09       27 阅读
  5. 达梦数据库常用命令整理

    2024-05-11 01:28:09       25 阅读
  6. Android 11.0 mtk平台系统添加公共so库的配置方法

    2024-05-11 01:28:09       31 阅读
  7. VUE中可适化大屏的自适应

    2024-05-11 01:28:09       33 阅读
  8. 飞天使-k8s知识点29-kubernetes安装1.28.0版本

    2024-05-11 01:28:09       27 阅读
  9. 第 7 章 MyBatis 缓存配置

    2024-05-11 01:28:09       26 阅读