1 前言

在直播、语聊房、K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混响回声、立体声效果,开发者可以灵活设置自己想要的声音,在通话或直播过程中动态调整变声、混响、混响回声、虚拟立体声,如果需要试听,可以启用耳返进行测试。

  • 变声:通过改变用户的音调,使输出的声音在感官上与原始声音不同,实现男声变女生等多种效果。
  • 混响:通过对声音的特殊处理,制造不同环境的混响效果,让声音如同在音乐厅、大教堂等场景中发出一般。
  • 混响回声:通过对声音的特殊处理,可搭配变声、混响以实现自定义各式各样的声音效果,例如空灵,机器人的声音。
  • 虚拟立体声:通过深度使用双声道技术,虚拟出发音源的各个位置角度,实现立体声、3D 环绕音、听声辩位等效果。

您可通过 ZEGO 提供的 音效体验 DEMO 体验 SDK 预设的人声效果。

本文将教你如何通过即构ZEGO sdk在Android端实现变声、混响、立体声。

2 示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/voicechange” 目录下的文件。

3 项目准备

在进行变声/混响/立体声之前,请确保:

  • 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。

** 接下来我们看看完整的实现流程。**

4 实现流程

4.1 变声

4.1.1 设置预设变声

调用 setVoiceChangerPreset 方法使用 SDK 预置的变声效果。

ZegoVoiceChangerPreset 预置的变声效果如下,开发者可以根据需要选择:

类型名 描述 变声类型
NONE 无变声 -
MEN_TO_CHILD 男声变童声 变声
MEN_TO_WOMEN 男声变女声 变声
WOMEN_TO_CHILD 女声变童声 变声
WOMEN_TO_MEN 女声变男声 变声
FOREIGNER 外国人声效 变声
OPTIMUS_PRIME 擎天柱声效 变声
ANDROID 机器人声效 变声
ETHEREAL 空灵声效 音色变换
MALE_MAGNETIC 磁性男 房间美声
FEMALE_FRESH 清新女 房间美声
MAJOR_C C大调电音 电音音效
MINOR_A A小调电音 电音音效
HARMONIC_MINOR 和声小调电音 电音音效

以下示例代码以“男声变童声”为例:

ZegoExpressEngine.getEngine().setVoiceChangerPreset(ZegoVoiceChangerPreset.MEN_TO_CHILD);

4.1.2 设置自定义变声

若 SDK 预置的变声效果无法满足需求,开发者可以调用 ZegoVoiceChangerParam 方法,通过音高参数 “pitch” 设置自定义变声,该参数取值范围为 [-8.0, 8.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。

ZegoVoiceChangerParam voiceChangerParam = new ZegoVoiceChangerParam();
param.pitch = 2.0f;
ZegoExpressEngine.getEngine().setVoiceChangerParam(param);

4.2 混响

4.2.1 设置预设混响

调用 setReverbPreset 通过预设枚举设置混响。

ZegoReverbPreset 预置的混响效果如下,开发者可以根据需要选择:

类型名 描述 混响类型
NONE -
SOFT_ROOM 小房间 空间塑造
LARGE_ROOM 大房间 空间塑造
CONCERT_HALL 音乐厅 空间塑造
VALLEY 山谷 空间塑造
RECORDING_STUDIO 录音室 空间塑造
BASEMENT 地下室 空间塑造
KTV KTV 空间塑造
POPULAR 流行 曲风
ROCK 摇滚 曲风
VOCAL_CONCERT 演唱会 空间塑造
GRAMO_PHONE 留声机 空间塑造

以下示例代码以“大房间”模式为例:

ZegoExpressEngine.getEngine().setReverbPreset(ZegoReverbPreset.LARGE_ROOM);

4.2.2 设置自定义混响

若 SDK 预设的混响类型无法满足需求,开发者可以调用 ZegoReverbAdvancedParam 方法,通过相关参数搭配设置,实现开发者需要的混响效果(详细参数说明请参考 API 文档)。

ZegoReverbAdvancedParam reverbParam = new ZegoReverbAdvancedParam();
reverbParam.damping = 50.0; // 混响阻尼
reverbParam.reverberance = 50.0; // 余响
reverbParam.roomSize = 50.0; // 房间大小
reverbParam.wetOnly = false;
reverbParam.wetGain = 5.0;
reverbParam.dryGain = 5.0;
reverbParam.toneLow = 80.0;
reverbParam.toneHigh = 80.0;
reverbParam.preDelay = 20.0;
reverbParam.stereoWidth = 0.0;
ZegoExpressEngine.getEngine().setReverbAdvancedParam(reverbParam);

当设置自定义混响参数后,启用混响时设置的预设混响效果则会失效。如果想再次使用 SDK 预设参数,可以使用 setReverbPreset 预设枚举方法进行设置。

4.3 混响回声

调用 setReverbEchoParam 方法,通过相关参数搭配设置,实现开发者需要的混响回声效果(详细参数说明请参考 API 文档)。

以下示例代码以实现“空灵声效”为例:

ZegoReverbEchoParam echoParam = new ZegoReverbEchoParam();
echoParam.inGain= 0.8f;
echoParam.outGain =1.0f;
echoParam.numDelays = 7;
int[] delay ={230,460,690,920,1150,1380,1610};
echoParam.delay=delay;float[] decay={0.41f,0.18f,0.08f,0.03f,0.009f,0.003f,0.001f};
echoParam.decay=decay;
zegoReverbEchoParamDatas.add(echoParam);
ZegoExpressEngine.getEngine().setReverbEchoParam(echoParam);

4.4 虚拟立体声

4.4.1 设置推流音频声道数

如果需要开启虚拟立体声功能,必须在推流前先调用 setAudioConfig 方法设置音频编码声道为 Stereo 双声道 (默认为 Mono 单声道)。

此处示例通过预设枚举构造 ZegoAudioConfig 设置为双声道。

ZegoAudioConfig audioConfig = new ZegoAudioConfig(STANDARD_QUALITY_STEREO);
ZegoExpressEngine.getEngine().setAudioConfig(audioConfig);

4.4.2 设置虚拟立体声参数

设置音频编码声道为双声道后,调用 enableVirtualStereo 方法,通过 “enable” 参数开启虚拟立体声,并通过 “angle” 参数设置虚拟立体声的声源角度后才有立体声效果,角度范围为 0 ~ 360,一般可设为 90 度(即正前方)。

自从 2.15.0 版本开始,SDK 新增支持全方位虚拟立体声效果,使用方式为将 “angle” 角度参数设置为 “-1”。

此处示例为开启虚拟立体声并将角度设置为 90 度:

ZegoExpressEngine.getEngine().enableVirtualStereo(true, 90);

此处示例为开启全方位虚拟立体声:

ZegoExpressEngine.getEngine().enableVirtualStereo(true, -1);

5 API参考列表

描述
setVoiceChangerPreset 通过预设枚举设置变声
ZegoVoiceChangerParam 变声器参数
setReverbPreset 通过预设枚举设置混响
ZegoReverbAdvancedParam 音频混响高级参数
setReverbEchoParam 设置混响回声效果
ZegoReverbParam 设置自定义混响
setAudioConfig 设置音频配置
enableVirtualStereo 设置虚拟立体声

6 小结

使用 ZEGO sdk,仅一两行代码即可实现生动有趣的变声/混响/立体声等音效,快来试试吧!

7 获取更多文档、Demo、技术帮助

获取 SDK 开发文档、demo,可访问 即构文档中心.
获取更多商务活动热门产品,可提交 信息联系商务.
注册即构ZEGO开发者帐号,快速开始。

如何基于 ZEGO SDK 实现 Android 变声/混响/立体声相关推荐

  1. 如何基于 ZEGO SDK 实现 iOS 变声/混响/立体声

    1 功能简介 在直播.语聊房.K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感.ZegoExpress SDK 提供了多种预设的变声.混响.混 ...

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

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

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

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

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

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

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

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

  6. 【毕业设计系列】033:基于MATLAB语言的实时变声器系统【含Matlab源码】

    Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...

  7. 【毕业设计/Matlab系列】基于MATLAB语言的实时变声器系统

    Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...

  8. android变声后的文件,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...

    版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...

  9. 基于 Agora SDK 实现 Android 端的多人视频互动

    本系列教程将分为三期,分享基于 Agora SDK 在各系统平台应用中实现一对一视频通话.多人互动直播,以及结合跨平台技术进行开发.本期推送在 Android.iOS.Windows.Web.macO ...

  10. 如何基于Zego sdk实现复杂网络服务高可用?

    以短视频.直播为代表的音视频互动,正成为互联网主流的交互方式.拿直播举例,它从一种娱乐形式,逐渐融合于教育.娱乐.电商.旅游等多种生态中.未来,直播还将成为像水.电一样的基础设施. 然而,仅仅可进行音 ...

最新文章

  1. python函数返回元组平均数_关于python:使用函数中的单个项返回元组
  2. Python进阶09 动态类型
  3. 【无码专区6】球与盒子(数学线性筛)
  4. 第一章 计算机系统概述 1.3 计算机的性能指标 [计算机组成原理笔记]
  5. 新型冠状病毒肺炎国内分省分日期从1.16起的全部数据爬取与整理代码(附下载)
  6. stm32F407 + FreeRTOS + FAT 文件系统移植
  7. 软件工程c语言课程设计的作用,C语言课程设计指导书2016版HNUST
  8. 1072. 开学寄语(20)
  9. 葵花宝典第一招:唐氏均线成交量参数
  10. qt高亮快捷键_Qt常用快捷键
  11. 企业以太坊联盟:区块链挑战者
  12. 官档翻译-启用High Precision Event Timer (HPET) Functionality
  13. 主编编辑器如何在文章下方插入往期回顾?
  14. linux 读取png图片大小,读取 png 图片的宽高信息
  15. 关于公网摄像机直播公网视频直播的基本思考方法
  16. 关于RT thread系统节拍时钟的配置
  17. 二十 关于gmtime、gmtime_r、localtime、localtime_r
  18. MATLAB m_map工具包的安装“三步走”
  19. 更换新手机,教你如何恢复微信聊天记录,早一点知道就好了
  20. Personalized Edge Intelligence via Federated Self-Knowledge Distillation, TPDS 2023

热门文章

  1. gitkraken点击Glo出现白屏的情况,回退回去的解决办法
  2. java制作闪星星_three.js制作星球和星星闪烁的简单示例
  3. 如何下载jQuery
  4. html doc,HTML咸蛋超人版.doc
  5. lizard的基本使用
  6. 从π与e开始 理解正态分布
  7. Gem5 O3 可视化
  8. Xcode:iOS崩溃日志分析方法
  9. html编辑个人信息页面,编辑个人信息.html
  10. android sit0 ip6tnl0,USB wifi调试笔记