如何基于 ZEGO SDK 实现 iOS 变声/混响/立体声
1 功能简介
在直播、语聊房、K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混响回声、立体声效果,开发者可以灵活设置自己想要的声音,如果需要试听,可以启用耳返进行测试。
- 变声:通过改变用户的音调,使输出的声音在感官上与原始声音不同,实现男声变女生等多种效果。
- 混响:通过对声音的特殊处理,制造不同环境的混响效果,让声音如同在音乐厅、大教堂等场景中发出一般。
- 混响回声:通过对声音的特殊处理,可搭配变声、混响以实现自定义各式各样的声音效果,例如空灵,机器人的声音。
- 虚拟立体声:通过深度使用双声道技术,虚拟出发音源的各个位置角度,实现立体声、3D 环绕音、听声辩位等效果。
您可通过 ZEGO 提供的 音效体验 DEMO 体验 SDK 预设的人声效果。
该功能只针对 SDK 采集的声音有效,开发者可以在通话或直播过程中动态调整变声、混响、混响回声、虚拟立体声。
2 示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/VoiceChangeReverbStereo” 目录下的文件。
3 前提条件
在使用变声/混响/立体声之前,请确保:
- 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
- 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。
4 使用步骤
4.1 变声
4.1.1 设置预设变声
调用 setVoiceChangerPreset
方法使用 SDK 预置的变声效果。
ZegoVoiceChangerPreset
预置的变声效果如下,开发者可以根据需要选择:
类型名 | 描述 | 变声类型 |
---|---|---|
None | 无变声 | - |
MenToChild | 男声变童声 | 变声 |
MenToWomen | 男声变女声 | 变声 |
WomenToChild | 女声变童声 | 变声 |
WomenToMen | 女声变男声 | 变声 |
Foreigner | 外国人音效 | 变声 |
OptimusPrime | 擎天柱音效 | 变声 |
Android | 机器人音效 | 变声 |
Ethereal | 空灵音效 | 音色变换 |
MaleMagnetic | 磁性男 | 房间美声 |
FemaleFresh | 清新女 | 房间美声 |
MajorC | C大调电音 | 电音音效 |
MinorA | A小调电音 | 电音音效 |
HarmonicMinor | 和声小调电音 | 电音音效 |
以下示例代码以“男声变童声”为例:
[[ZegoExpressEngine sharedEngine] setVoiceChangerPreset:ZegoVoiceChangerPresetMenToChild];
4.1.2 设置自定义变声
若 SDK 预置的变声效果无法满足需求,开发者可以调用 ZegoVoiceChangerParam
方法,通过音高参数 “pitch” 设置自定义变声,该参数取值范围为 [-8.0, 8.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。
ZegoVoiceChangerParam *param = [[ZegoVoiceChangerParam alloc] init];
param.pitch = 2.0;
[[ZegoExpressEngine sharedEngine] setVoiceChangerParam:param];
4.2 混响
4.2.1 设置预设混响
调用 setReverbPreset
通过预设枚举设置混响。
ZegoReverbPreset
预置的混响效果如下,开发者可以根据需要选择:
类型名 | 描述 | 混响类型 |
---|---|---|
None | 无 | - |
SoftRoom | 小房间 | 空间塑造 |
LargeRoom | 大房间 | 空间塑造 |
ConcerHall | 音乐厅 | 空间塑造 |
Valley | 山谷 | 空间塑造 |
RecordingStudio | 录音室 | 空间塑造 |
Basement | 地下室 | 空间塑造 |
KTV | KTV | 空间塑造 |
Popular | 流行 | 曲风 |
Rock | 摇滚 | 曲风 |
VocalConcert | 演唱会 | 空间塑造 |
GramoPhone | 留声机 | 空间塑造 |
以下示例代码以“大房间”模式为例:
[[ZegoExpressEngine sharedEngine] setReverbPreset:ZegoReverbPresetLargeRoom];
4.2.2 设置自定义混响
若 SDK 预设的混响类型无法满足需求,开发者可以调用 ZegoReverbAdvancedParam
方法,通过相关参数搭配设置,实现开发者需要的混响效果(详细参数说明请参考 API 文档)。
ZegoReverbAdvancedParam *reverbParam = [[ZegoReverbAdvancedParam alloc] init];
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 sharedEngine] setReverbAdvancedParam:reverbParam];
当设置自定义混响参数后,启用混响时设置的预设混响效果则会失效。如果想再次使用 SDK 预设参数,可以使用 setReverbPreset
预设枚举方法进行设置。
4.3 混响回声
调用 setReverbEchoParam
方法,通过相关参数搭配设置,实现开发者需要的混响回声效果(详细参数说明请参考 API 文档)。
以下示例代码以实现“空灵音效”为例:
ZegoReverbEchoParam *echoParamEthereal = [[ZegoReverbEchoParam alloc] init];
echoParamEthereal.inGain = 0.8;
echoParamEthereal.outGain = 1.0;
echoParamEthereal.numDelays = 7;
echoParamEthereal.delay = @[@230, @460, @690, @920, @1150, @1380, @1610];
echoParamEthereal.decay = @[@0.41f, @0.18f, @0.08f, @0.03f, @0.009f, @0.003f, @0.001f];
[[ZegoExpressEngine sharedEngine] setReverbEchoParam:echoParamEthereal];
4.4 虚拟立体声
4.4.1 设置推流音频声道数
如果需要开启虚拟立体声功能,必须在推流前先调用 setAudioConfig
方法设置音频编码声道为 Stereo 双声道(默认为 Mono 单声道)。
此处示例通过预设枚举构造 ZegoAudioConfig
设置为双声道。
ZegoAudioConfig *config = [ZegoAudioConfig configWithPreset:ZegoAudioConfigPresetStandardQualityStereo];
[[ZegoExpressEngine sharedEngine] setAudioConfig:config];
4.4.2 设置虚拟立体声参数
设置音频编码声道为双声道后,调用 enableVirtualStereo
方法,通过 “enable” 参数开启虚拟立体声,并通过 “angle” 参数设置虚拟立体声的声源角度后才有立体声效果,角度范围为 0 ~ 360,一般可设为 90 度(即正前方)。
自从 2.15.0 版本开始,SDK 新增支持全方位虚拟立体声效果,使用方式为将 “angle” 角度参数设置为 “-1”。
此处示例为开启虚拟立体声并将角度设置为 90 度:
[[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:90];
此处示例为开启全方位虚拟立体声:
[[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:-1];
5 API参考列表
方法 | 描述 |
---|---|
setVoiceChangerPreset
|
通过预设枚举设置变声 |
ZegoVoiceChangerParam
|
变声器参数 |
setReverbPreset
|
通过预设枚举设置混响 |
ZegoReverbAdvancedParam
|
音频混响高级参数 |
setReverbEchoParam
|
设置混响回声效果 |
setAudioConfig
|
设置音频配置 |
enableVirtualStereo
|
设置虚拟立体声 |
获取Demo
获取本文的Demo、开发文档、技术支持。
获取SDK的商务活动、热门产品。
注册即构ZEGO开发者帐号,快速开始。
如何基于 ZEGO SDK 实现 iOS 变声/混响/立体声相关推荐
- 基于 ZEGO SDK 实现 iOS 一对一音视频聊天应用
1 准备环境 在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求: Xcode 12.0 或以上版本. iOS 9.0 或以上版本且支持音视频的 iOS 设备. iOS 设备 ...
- 【毕业设计系列】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代码实现 前言 在大学毕业设计中,要求实现一个 ...
- 如何基于 ZEGO SDK 实现 Windows 一对一音视频聊天应用
互联网发展至今,实时视频和语音通话越来越被大众所依赖. 今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙 ...
- 如何基于 ZEGO SDK 实现 Flutter 一对一音视频聊天应用
之前的文章发布了ZEGO SDK实现Android端音视频通话应用的开发教程,不少开发者反馈很实用,能不能也出一版Flutter的教程. 有求必应,这不小编来了- 我们封装了ZEGO Flutter ...
- iOS变声语音项目总结
最近做了一个变声语音的项目,里面涉及到很多音频相关的知识,怕时间久了记不住,写下来备忘. 1. 语音的编码 语音录制的时候要选择一个编码格式,因为移动端的原因,这个编码格式需要满足压缩比高.声音质量较 ...
- 如何基于Zego sdk实现复杂网络服务高可用?
以短视频.直播为代表的音视频互动,正成为互联网主流的交互方式.拿直播举例,它从一种娱乐形式,逐渐融合于教育.娱乐.电商.旅游等多种生态中.未来,直播还将成为像水.电一样的基础设施. 然而,仅仅可进行音 ...
- 在线K歌如何基于zego sdk实现音视频社交玩法
无处不在的在线K歌. 在线K歌一直是泛娱乐领域的热门赛道,艾媒咨询最新数据表示,2021年中国在线K歌用户规模约为5.1亿人,渗透率约为49.7%,这意味着每两个网民中,就有一个体验过在线K歌. 尽管 ...
- 如何基于 ZEGO SDK 实现 Android 一对一音视频聊天应用
疫情期间,很多线下活动转为线上举行,实时音视频的需求剧增,在视频会议,在线教育,电商购物等众多场景成了"生活新常态". 本文将教你如何通过即构ZEGO sdk在Android端搭建 ...
最新文章
- 浅谈权限设计(来自深空老大)
- 【问题收录】Eclipse the import java.awt cannot be resolve 问题解决
- 挖矿木马的战略战术分析
- 五、开始学习Excel函数,效率快速提高
- excel 公式 单引号 concat_从Excel的数据类型说Python
- with语句python_Python之with语句
- Web开发之二:什么是前端、什么是后端
- python 把函数作为参数 ---高阶函数
- c语言编写程序统计某给定ascii文件中个字母的出现频率,2016年浙江理工大学理学院C语言程序设计考研复试题库...
- 实时计算在有赞的实践-效率提升之路
- Python读取并遍历CSV数据
- 通过Jquery异步获取股票实时数据
- 用计算机计算勾股定理,勾股定理公式计算器(勾股定理计算工具)V2018.1.0 官方版...
- Linus 没空实现的功能,开发者做到了:苹果 M1 Mac 成功运行原生 Linux!
- Android架构设计模式总结(MVX)
- 部分古钱知识--(4)
- bdd 启动 data processing进程报错 Can't locate LWP.pm in @INC
- 《关山月》赏析-(李白明月姑娘之五)
- 五、椒盐排骨(Pepper Salt Spareribs)
- 解决M1处理器安装PS闪退问题Photoshop 2021 fo mac(支持最新M1芯片处理器款mac)
热门文章
- 区别:count(1) 和 count(*)和count(列名)
- Java静态方法调用内部类
- HMS的华为天际通出境服务还不错
- docker 常用指令(随心记)
- Android-蓝牙开发:解决华为P40(鸿蒙系统)搜索不到蓝牙设备
- 大唐计算机主板系列,大唐第五代Broadwell处理器平台ITX主板全新上市
- linux nmcli 添加网卡,linux使用nmcli配置网络
- 阿里巴巴CTO王坚:只有跑在互联网和云计算上的才是大数据
- 运营日记:把握住APP核心价值
- Python编码规范及代码优化建议