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

打印 上一主题 下一主题

主题 561|帖子 561|积分 1683

1 功能简介

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

  • 变声:通过改变用户的音调,使输出的声音在感官上与原始声音不同,实现男声变女生等多种效果。
  • 混响:通过对声音的特殊处理,制造不同环境的混响效果,让声音如同在音乐厅、大教堂等场景中发出一般。
  • 混响回声:通过对声音的特殊处理,可搭配变声、混响以实现自定义各式各样的声音效果,例如空灵,机器人的声音。
  • 虚拟立体声:通过深度使用双声道技术,虚拟出发音源的各个位置角度,实现立体声、3D 环绕音、听声辩位等效果。
您可通过 ZEGO 提供的 音效体验 DEMO 体验 SDK 预设的人声效果。
该功能只针对 SDK 采集的声音有效,开发者可以在通话或直播过程中动态调整变声、混响、混响回声、虚拟立体声。
2 示例源码下载

请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/AdvancedAudioProcessing/VoiceChangeReverbStereo” 目录下的文件。
3 前提条件

在使用变声/混响/立体声之前,请确保:
4 使用步骤

4.1 变声

4.1.1 设置预设变声

调用 setVoiceChangerPreset 方法使用 SDK 预置的变声效果。
ZegoVoiceChangerPreset 预置的变声效果如下,开发者可以根据需要选择:
类型名描述变声类型None无变声-MenToChild男声变童声变声MenToWomen男声变女声变声WomenToChild女声变童声变声WomenToMen女声变男声变声Foreigner外国人音效变声OptimusPrime擎天柱音效变声Android机器人音效变声Ethereal空灵音效音色变换MaleMagnetic磁性男房间美声FemaleFresh清新女房间美声MajorCC大调电音电音音效MinorAA小调电音电音音效HarmonicMinor和声小调电音电音音效以下示例代码以“男声变童声”为例:
  1. [[ZegoExpressEngine sharedEngine] setVoiceChangerPreset:ZegoVoiceChangerPresetMenToChild];
复制代码
4.1.2 设置自定义变声

若 SDK 预置的变声效果无法满足需求,开发者可以调用 ZegoVoiceChangerParam 方法,通过音高参数 “pitch” 设置自定义变声,该参数取值范围为 [-8.0, 8.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。
  1. ZegoVoiceChangerParam *param = [[ZegoVoiceChangerParam alloc] init];
  2. param.pitch = 2.0;
  3. [[ZegoExpressEngine sharedEngine] setVoiceChangerParam:param];
复制代码
4.2 混响

4.2.1 设置预设混响

调用 setReverbPreset 通过预设枚举设置混响。
ZegoReverbPreset 预置的混响效果如下,开发者可以根据需要选择:
类型名描述混响类型None无-SoftRoom小房间空间塑造LargeRoom大房间空间塑造ConcerHall音乐厅空间塑造Valley山谷空间塑造RecordingStudio录音室空间塑造Basement地下室空间塑造KTVKTV空间塑造Popular流行曲风Rock摇滚曲风VocalConcert演唱会空间塑造GramoPhone留声机空间塑造以下示例代码以“大房间”模式为例:
  1. [[ZegoExpressEngine sharedEngine] setReverbPreset:ZegoReverbPresetLargeRoom];
复制代码
4.2.2 设置自定义混响

若 SDK 预设的混响类型无法满足需求,开发者可以调用 ZegoReverbAdvancedParam 方法,通过相关参数搭配设置,实现开发者需要的混响效果(详细参数说明请参考 API 文档)。
  1. ZegoReverbAdvancedParam *reverbParam = [[ZegoReverbAdvancedParam alloc] init];
  2. reverbParam.damping = 50.0; // 混响阻尼
  3. reverbParam.reverberance = 50.0; // 余响
  4. reverbParam.roomSize = 50.0; // 房间大小
  5. reverbParam.wetOnly = false;
  6. reverbParam.wetGain = 5.0;
  7. reverbParam.dryGain = 5.0;
  8. reverbParam.toneLow = 80.0;
  9. reverbParam.toneHigh = 80.0;
  10. reverbParam.preDelay = 20.0;
  11. reverbParam.stereoWidth = 0.0;
  12. [[ZegoExpressEngine sharedEngine] setReverbAdvancedParam:reverbParam];
复制代码
当设置自定义混响参数后,启用混响时设置的预设混响效果则会失效。如果想再次使用 SDK 预设参数,可以使用 setReverbPreset 预设枚举方法进行设置。
4.3 混响回声

调用 setReverbEchoParam 方法,通过相关参数搭配设置,实现开发者需要的混响回声效果(详细参数说明请参考 API 文档)。
以下示例代码以实现“空灵音效”为例:
  1. ZegoReverbEchoParam *echoParamEthereal = [[ZegoReverbEchoParam alloc] init];
  2. echoParamEthereal.inGain = 0.8;
  3. echoParamEthereal.outGain = 1.0;
  4. echoParamEthereal.numDelays = 7;
  5. echoParamEthereal.delay = @[@230, @460, @690, @920, @1150, @1380, @1610];
  6. echoParamEthereal.decay = @[@0.41f, @0.18f, @0.08f, @0.03f, @0.009f, @0.003f, @0.001f];
  7. [[ZegoExpressEngine sharedEngine] setReverbEchoParam:echoParamEthereal];
复制代码
4.4 虚拟立体声

4.4.1 设置推流音频声道数

如果需要开启虚拟立体声功能,必须在推流前先调用 setAudioConfig 方法设置音频编码声道为 Stereo 双声道(默认为 Mono 单声道)。
此处示例通过预设枚举构造 ZegoAudioConfig 设置为双声道。
  1. ZegoAudioConfig *config = [ZegoAudioConfig configWithPreset:ZegoAudioConfigPresetStandardQualityStereo];
  2. [[ZegoExpressEngine sharedEngine] setAudioConfig:config];
复制代码
4.4.2 设置虚拟立体声参数

设置音频编码声道为双声道后,调用 enableVirtualStereo 方法,通过 “enable” 参数开启虚拟立体声,并通过 “angle” 参数设置虚拟立体声的声源角度后才有立体声效果,角度范围为 0 ~ 360,一般可设为 90 度(即正前方)。
自从 2.15.0 版本开始,SDK 新增支持全方位虚拟立体声效果,使用方式为将 “angle” 角度参数设置为 “-1”。
此处示例为开启虚拟立体声并将角度设置为 90 度:
  1. [[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:90];
复制代码
此处示例为开启全方位虚拟立体声:
  1. [[ZegoExpressEngine sharedEngine] enableVirtualStereo:YES angle:-1];
复制代码
5 API参考列表

方法描述setVoiceChangerPreset通过预设枚举设置变声ZegoVoiceChangerParam变声器参数setReverbPreset通过预设枚举设置混响ZegoReverbAdvancedParam音频混响高级参数setReverbEchoParam设置混响回声效果setAudioConfig设置音频配置enableVirtualStereo设置虚拟立体声获取Demo

获取本文的Demo、开发文档、技术支持。
获取SDK的商务活动、热门产品。
注册即构ZEGO开发者帐号,快速开始。

来源:https://www.cnblogs.com/zegodeveloper/p/16253353.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表