如何基于 ZEGO SDK 实现 Android 变声/混响/立体声
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 变声/混响/立体声相关推荐
- 如何基于 ZEGO SDK 实现 iOS 变声/混响/立体声
1 功能简介 在直播.语聊房.K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感.ZegoExpress SDK 提供了多种预设的变声.混响.混 ...
- 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用
疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了"生活新常态". 本文将教你如何通过即构ZEGO sdk在Android端搭建 ...
- 如何基于 ZEGO SDK 实现 Android 通话质量监测
功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 参考 下载示例源码 获取源码. 相关源码请查看 &qu ...
- 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用
之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...
- 如何基于 ZEGO SDK 实现 Windows 一对一音视频聊天应用
互联网发展至今,实时视频和语音通话越来越被大众所依赖. 今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙 ...
- 【毕业设计系列】033:基于MATLAB语言的实时变声器系统【含Matlab源码】
Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...
- 【毕业设计/Matlab系列】基于MATLAB语言的实时变声器系统
Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...
- android变声后的文件,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...
版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...
- 基于 Agora SDK 实现 Android 端的多人视频互动
本系列教程将分为三期,分享基于 Agora SDK 在各系统平台应用中实现一对一视频通话.多人互动直播,以及结合跨平台技术进行开发.本期推送在 Android.iOS.Windows.Web.macO ...
- 如何基于Zego sdk实现复杂网络服务高可用?
以短视频.直播为代表的音视频互动,正成为互联网主流的交互方式.拿直播举例,它从一种娱乐形式,逐渐融合于教育.娱乐.电商.旅游等多种生态中.未来,直播还将成为像水.电一样的基础设施. 然而,仅仅可进行音 ...
最新文章
- python函数返回元组平均数_关于python:使用函数中的单个项返回元组
- Python进阶09 动态类型
- 【无码专区6】球与盒子(数学线性筛)
- 第一章 计算机系统概述 1.3 计算机的性能指标 [计算机组成原理笔记]
- 新型冠状病毒肺炎国内分省分日期从1.16起的全部数据爬取与整理代码(附下载)
- stm32F407 + FreeRTOS + FAT 文件系统移植
- 软件工程c语言课程设计的作用,C语言课程设计指导书2016版HNUST
- 1072. 开学寄语(20)
- 葵花宝典第一招:唐氏均线成交量参数
- qt高亮快捷键_Qt常用快捷键
- 企业以太坊联盟:区块链挑战者
- 官档翻译-启用High Precision Event Timer (HPET) Functionality
- 主编编辑器如何在文章下方插入往期回顾?
- linux 读取png图片大小,读取 png 图片的宽高信息
- 关于公网摄像机直播公网视频直播的基本思考方法
- 关于RT thread系统节拍时钟的配置
- 二十 关于gmtime、gmtime_r、localtime、localtime_r
- MATLAB m_map工具包的安装“三步走”
- 更换新手机,教你如何恢复微信聊天记录,早一点知道就好了
- Personalized Edge Intelligence via Federated Self-Knowledge Distillation, TPDS 2023