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

2022年05月11日 阅读数:4
这篇文章主要向大家介绍如何基于 ZEGO SDK 实现 iOS 变声/混响/立体声,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1 功能简介

在直播、语聊房、K 歌房场景中,为增长趣味性和互动性,玩家能够经过变声来搞怪,经过混响烘托气氛,经过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混响回声、立体声效果,开发者能够灵活设置本身想要的声音,若是须要试听,能够启用耳返进行测试。ide

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

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

该功能只针对 SDK 采集的声音有效,开发者能够在通话或直播过程当中动态调整变声、混响、混响回声、虚拟立体声。编码

2 示例源码下载

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

相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/VoiceChangeReverbStereo” 目录下的文件。spa

3 前提条件

在使用变声/混响/立体声以前,请确保:.net

4 使用步骤

4.1 变声

4.1.1 设置预设变声

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

ZegoVoiceChangerPreset 预置的变声效果以下,开发者能够根据须要选择:视频

类型名 描述 变声类型
None 无变声 -
MenToChild 男声变童声 变声
MenToWomen 男声变女声 变声
WomenToChild 女声变童声 变声
WomenToMen 女声变男声 变声
Foreigner 外国人音效 变声
OptimusPrime 擎天柱音效 变声
Android 机器人音效 变声
Ethereal 空灵音效 音色变换
MaleMagnetic 磁性男 房间美声
FemaleFresh 清新女 房间美声
MajorC C大调电音 电音音效
MinorA A小调电音 电音音效
HarmonicMinor 和声小调电音 电音音效

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

 [[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开发者账号,快速开始。