1 概述

在实时音视频通话时,可以对音频进行 3A 处理,提高通话质量和用户体验。主要包括 AEC(Acoustic Echo Cancelling,回声消除),AGC(Automatic Gain Control,自动增益控制)和 ANS(Active Noise Control,降噪)。

  • AEC(回声消除):对采集到的音频数据进行过滤以减少音频中的回声。
  • AGC(自动增益控制):自动调节麦克风音量,适应远近拾音,保持音量稳定。
  • ANS(降噪):识别声音中的背景噪声并进行消除,开启该功能后可以使人声更加清晰。

2 源码下载

下载示例源码

参考目录文件: /ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/audio3a

3 环境准备

在使用音频 3A 处理之前,请确保:

4 使用步骤

4.1 设置 AEC(回声消除)

可以按照以下步骤完成回声消除相关设置:

  1. 调用 enableAEC 接口开启回声消除,该功能开启后,SDK 会对采集到的音频数据进行过滤以减少音频中的回声。

  2. (可选)可通过调用 enableHeadphoneAEC 接口设置是否在使用耳机的时候开启回声消除。

  3. 开启回声消除后,可通过调用 setAECMode 接口设置回声消除模式。SDK 支持以下三种回声消除模式:

枚举值 说明
ZegoAECMode.AGGRESSIVE 激进的回声抵消,可能会比较明显的影响音质,但是回声会消除得很干净。
ZegoAECMode.MEDIUM 适度的回声抵消,可能会稍微影响一点点音质,但是残留的回声会更少。
ZegoAECMode.SOFT 舒适的回声抵消,回声抵消基本不会影响声音的音质,可能有时会残留一点回声,但不会影响正常听音。

以设置适度的回声抵消为例:

// 开启 AEC
engine.enableAEC(true);
// 在使用耳机时开启 AEC
engine.enableHeadphoneAEC(true);
// 设置 AEC 模式为 ZegoAECMode.MEDIUM
engine.setAECMode(ZegoAECMode.MEDIUM);

4.2 设置 AGC (自动增益控制)

调用 enableAGC 接口开启自动增益控制,开启该功能后,SDK 能够自动调节麦克风音量,适应远近拾音,保持音量稳定。

// 开启 AGC
engine.enableAGC(true);

4.3 设置 ANS (噪声抑制)

可以按照以下步骤完成噪声抑制相关设置:

  1. 调用 enableANS 接口开启噪声抑制,该功能开启后可以使人声更加清晰。

  2. (可选)可通过调用 enableTransientANS 接口设置是否开启瞬态噪声抑制,瞬态噪声抑制用于抑制敲击键盘、桌子等瞬态噪声。

  3. 开启噪声抑制后,可通过调用 setANSMode 接口设置噪声抑制模式,默认值为 “MEDIUM”。SDK 支持以下三种噪声抑制模式:

枚举值 说明
ZegoANSMode.AGGRESSIVE 激进的噪声抑制,有可能明显损伤音质,但有很好的降噪效果。
ZegoANSMode.MEDIUM (默认值)适度的噪声抑制,有可能损伤一些音质,但有不错的降噪效果。
ZegoANSMode.SOFT 轻度的噪声抑制,基本不会损伤音质,但会残留一些噪声。
ZegoANSMode.AI AI 模式噪声抑制,会对音乐有较大损伤,可用于处理非稳态噪声,但不能用于需要采集背景音的音源处理,详情请参考 AI 降噪

以设置轻度的噪声抑制为例:

// 开启 ANS
engine.enableANS(true);
// 开启瞬态噪声抑制
engine.enableTransientANS(true);
// 设置 ANS 模式为 ZegoANSMode.SOFT
engine.setANSMode(ZegoANSMode.SOFT);

5 推荐配置

SDK 中音频 3A 处理的默认配置和推荐配置如下:

接口名称 接口描述 默认配置 推荐配置
enableAEC 开/关回声消除 True 在一般使用场景中,建议不修改该配置,保持默认即可。
enableHeadphoneAEC 是否在使用耳机时开启回声消除 False 在普通语聊或游戏开黑时,建议启用该功能,其他情况下一般无需启用。
setAECMode 设置回声消除模式 ZegoAECMode.AGGRESSIVE(激进的回声抵消) 在一般使用场景中,建议不修改该配置,保持默认即可。
enableAGC 开/关自动增益控制 True
  • 在普通语聊场景中,建议使用默认配置。
  • 在音乐电台场景中,建议不开启自动增益控制以还原人声。
  • 在教育场景中,如大班课、小班课和 1V1 等,建议开启自动增益控制。
enableANS 开/关噪声抑制 True 在一般使用场景中,建议不修改该配置,保持默认即可。
setANSMode 设置音频噪声抑制模式 ZegoANSMode.MEDIUM(适度的噪声抑制) 在一般使用场景中,建议不修改该配置,保持默认即可。

6 API 参考列表

方法 描述
enableAEC 开/关回声消除
enableHeadphoneAEC 是否在使用耳机时开启回声消除
setAECMode 设置回声消除模式
enableAGC 开/关自动增益控制
enableANS 开/关噪声抑制
enableTransientANS 开/关瞬态噪声抑制
setANSMode 设置音频噪声抑制模式

结语

获取本文的Demo、开发文档、技术支持。

获取SDK的商务活动、热门产品。

注册即构ZEGO开发者帐号,快速开始。

如何基于 ZEGO SDK 实现回声消除、自动增益控制、降噪功能的更多相关文章

  1. 基于深度学习的回声消除系统与Pytorch实现

    文章作者:凌逆战 文章代码(pytorch实现):https://github.com/LXP-Never/AEC_DeepModel 文章地址(转载请指明出处):https://www.cnblog ...

  2. 如何基于 ZEGO SDK 实现 Windows 一对一音视频聊天应用

    互联网发展至今,实时视频和语音通话越来越被大众所依赖. 今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙 ...

  3. 如何基于ZEGO SDK 实现通话质量监测

    如何基于ZEGO SDK 实现通话质量监测 1 功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 请参考 ...

  4. 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用

    疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了"生活新常态". 本文将教你如何通过即构ZEGO sdk在Android端搭建 ...

  5. 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用?

    之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...

  6. 如何基于 ZEGO SDK 实现 Android 通话质量监测

    功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 参考 下载示例源码 获取源码. 相关源码请查看 &qu ...

  7. 声学回声消除(Acoustic Echo Cancellation)

    回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...

  8. 再谈回声消除测评丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网音视频实验室工程师 黄译庆. 音频质量的优化是一个复杂的系统工程,回声消除是其中一个老生常谈的话题,一般来说,回声消除的效果受设备本身的声学设 ...

  9. Flex Flash Player回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

  10. Flex回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

随机推荐

  1. WPF 的 FlowDocumentScrollViewer滚动到最底下的方法

    官网上好像并没有直接给相应的接口和方法. 发现一种有效的方法: 先说方法: ScrollViewer sv = flowScrollViewer.Template.FindName("PAR ...

  2. C#之线程基础

    创建线程 using System; using System.Threading; using System.Threading.Tasks; namespace threadDemo { clas ...

  3. ODOO产品介绍

    自己整理的odoo15产品介绍资料,内容供参考,需要ppt的请联系: 欢迎技术交流.项目合作 !    

  4. MySQL设置字符集、排序规则和区分字母大小

    摘要:在MySQL中,设置字符集和排序规则,在查询时区分字母大小写,utf8mb4支持emoji表情,而utf8不支持. 问题综述   在工作中,设置的一些唯一标志字符串和登录密码都是区分大小写的,但 ...

  5. 把多个文件打包压缩成tar.gz文件并解压的Java实现

    压缩文件   在Java中,可以 使用GZIPOutputStream创建gzip(gz)压缩文件,它在commons-compress下面,可以通过如下的maven坐标引入: <depende ...

  6. TINYINT[M]、INT[M]和BIGINT[M]中M值的意义

    TINYINT[(M)] [UNSIGNED] [ZEROFILL] A very small integer. The signed range is -128 to 127. The unsign ...

  7. 通过 MCP 服务对接 PostgreSQL 问数 (详细实操说明)

    一.实操环境 1.1Panel:Linux服务器运维管理面板 2.MaxKB:强大易用的企业AI助手 3.MCP网站:https://mcp.so/ 二.操作说明 2.1.步骤一:1Panel 2.0 ...

  8. 你应该懂的AI 大模型(五)之 LangChain 之 LCEL

    本文 对<LangChain>一文中的 Chain 与 LCEL 部分的示例进行详细的展示. 先回顾下 在LangChain框架中,Chain(链) 和 LCEL(LangChain Ex ...

  9. APEX实战第4篇:如何把APEX程序变成“移动端APP”?

    因为使用手机登录APEX程序时,每次都要先到手机浏览器的入口感觉不方便且不专业,所以能不能像APP那样直接点击进入呢? 最简单的方式,就是使用PWA来实现类似APP程序一样的移动端登录. PWA本身配 ...

  10. Dify发布V1.5.0:可视化故障排查!超实用

    Dify 本周又发布了一个实用的大版本,直接从 V1.4.3 版本干到 V1.5.0 了,那问题来了,这次更新了哪些内容呢?接下来我们一起来看. 官方给这次更新的定义是:一个简洁.强大的更新,通过简化 ...