在直播、语聊房、K歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混响回声、立体声效果,开发者可以灵活设置自己想要的声音,如果需要试听,可以启用耳返进行测试。
您可通过 ZEGO 提供的 音效体验 DEMO 体验 SDK 预设的人声效果。
该功能只针对 SDK 采集的声音有效,开发者可以在通话或直播过程中动态调整变声、混响、混响回声、虚拟立体声。
在进行变声/混响/立体声前,请确保已在你的项目中实现了基本的音视频推拉流功能,详情请参考 快速开始 - 集成。
有两种方式设置变声,分别为预设变声和自定义变声。
如果需要设置自定义变声,请查看 设置自定义变声。
调用 setVoiceChangerPreset 方法使用 SDK 预置的变声效果。
ZegoVoiceChangerPreset 预置的变声效果如下,开发者可以根据需要选择:
| 类型名 | 预设值 | 描述 | 变声类型 |
|---|---|---|---|
| NONE | 0 | 无变声 | - |
| MEN_TO_CHILD | 1 | 男声变童声 | 变声 |
| MEN_TO_WOMEN | 2 | 男声变女声 | 变声 |
| WOMEN_TO_CHILD | 3 | 女声变童声 | 变声 |
| WOMEN_TO_MEN | 4 | 女声变男声 | 变声 |
| FOREIGNER | 5 | 外国人声效 | 变声 |
| OPTIMUS_PRIME | 6 | 擎天柱声效 | 变声 |
| ANDROID | 7 | 机器人声效 | 变声 |
| ETHEREAL | 8 | 空灵声效 | 音色变换 |
| MALE_MAGNETIC | 9 | 磁性男 | 房间美声 |
| FEMALE_FRESH | 10 | 清新女 | 房间美声 |
| MAJOR_C | 11 | C 大调电音 | 电音音效 |
| MINOR_A | 12 | A 小调电音 | 电音音效 |
| HARMONIC_MINOR | 13 | 和声小调电音 | 电音音效 |
| FEMALE_ENERGETIC | 14 | 女活力音效 | 房间美声 |
| RICH_NESS | 15 | 浑厚音效 | 房间美声 |
| MUFFLED | 16 | 低沉音效 | 房间美声 |
| ROUNDNESS | 17 | 圆润音效 | 房间美声 |
| FALSETTO | 18 | 假音音效 | 房间美声 |
| FULLNESS | 19 | 饱满音效 | 房间美声 |
| CLEAR | 20 | 清澈音效 | 房间美声 |
| HIGHLY_RESONANT | 21 | 高亢音效 | 房间美声 |
| LOUD_CLEAR | 22 | 嘹亮音效 | 房间美声 |
| MINIONS | 23 | 小黄人音效 | 变声 |
| AUTOBOT | 30 | 汽车人音效 | 变声 |
| OUT_OF_POWER | 31 | 没电了音效 | 变声 |
以下示例代码以男声变童声为例:
ZegoExpressSDK::getEngine()->setVoiceChangerPreset(ZEGO_VOICE_CHANGER_PRESET_MEN_TO_CHILD);
如果需要设置预设变声,请查看 设置预设变声。
若 SDK 预置的变声效果无法满足需求,开发者可以调用 ZegoVoiceChangerParam 方法,通过音高参数 pitch 设置自定义变声,该参数取值范围为 [-12.0, 12.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。
ZegoVoiceChangerParam param;
param.pitch = 2.0f;
ZegoExpressSDK::getEngine()->setVoiceChangerParam(param);
有两种方式设置混响,分别为预设混响和自定义混响。
如果需要设置自定义混响,请查看 设置自定义混响。
调用 setReverbPreset 通过预设枚举设置混响。
ZegoReverbPreset 预置的混响效果如下,开发者可以根据需要选择:
| 类型名 | 预设值 | 描述 | 混响类型 |
|---|---|---|---|
NONE |
0 |
无 |
- |
SOFT_ROOM |
1 |
小房间 |
空间塑造 |
LARGE_ROOM |
2 |
大房间 |
空间塑造 |
CONCERT_HALL |
3 |
音乐厅 |
空间塑造 |
VALLEY |
4 |
山谷 |
空间塑造 |
RECORDING_STUDIO |
5 |
录音室 |
空间塑造 |
BASEMENT |
6 |
地下室 |
空间塑造 |
KTV |
7 |
KTV,适用于音色瑕疵较为明显的用户 |
空间塑造 |
POPULAR |
8 |
流行 |
曲风 |
ROCK |
9 |
摇滚 |
曲风 |
VOCAL_CONCERT |
10 |
演唱会 |
空间塑造 |
GRAMO_PHONE |
11 |
留声机 |
空间塑造 |
ENHANCED_KTV |
12 |
增强型 KTV,更集中、亮度更好的 KTV 人声效果,适用于普通用户和专业用户 |
空间塑造 |
以下示例代码以大房间模式为例:
ZegoExpressSDK::getEngine()->setReverbPreset(ZEGO_REVERB_PRESET_LARGE_ROOM);
如果需要设置预设混响,请查看 设置预设混响。
若 SDK 预设的混响类型无法满足需求,开发者可以调用 ZegoReverbAdvancedParam 方法,通过相关参数搭配设置,实现开发者需要的混响效果(详细参数说明请参考 API 文档)。
ZegoReverbAdvancedParam reverbParam;
reverbParam.damping = 50.0; // 混响阻尼
reverbParam.reverberance = 50.0; // 余响
reverbParam.roomSize = 50.0; // 房间大小
reverbParam.wetOnly = false; // 只有湿信号
reverbParam.wetGain = 5.0; // 湿信号增益(dB),取值范围 [-20.0, 10.0]
reverbParam.dryGain = 5.0; // 干信号增益(dB),取值范围 [-20.0, 10.0]
reverbParam.toneLow = 80.0; // 低频衰减,默认为不衰减(100%)
reverbParam.toneHigh = 80.0; // 高频衰减,默认为不衰减(100%)
reverbParam.preDelay = 20.0; // 初始延迟时间(ms)。取值范围 [0, 200]
reverbParam.stereoWidth = 0.0; // 立体声宽度(百分比),默认值为 0%
ZegoExpressSDK::getEngine()->setReverbAdvancedParam(reverbParam);
当设置自定义混响参数后,启用混响时设置的预设混响效果则会失效。如果想再次使用 SDK 预设参数,可以使用 setReverbPreset 预设枚举方法进行设置。
调用 setReverbEchoParam 方法,通过相关参数搭配设置,实现开发者需要的混响回声效果(详细参数说明请参考 API 文档)。
以下示例代码以实现空灵效果为例:
ZegoReverbEchoParam echoParamEthereal;
echoParamEthereal.inGain = 0.8; // 输入音频信号的增益,取值范围 [0.0, 1.0]
echoParamEthereal.outGain = 1.0; // 输出音频信号的增益,取值范围 [0.0, 1.0]
echoParamEthereal.numDelays = 7; // 回声数量,取值范围 [0, 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}; // 回声信号分别的衰减系数
ZegoExpressSDK::getEngine()->setReverbEchoParam(echoParamEthereal);
如果需要开启虚拟立体声功能,必须在推流前先调用 setAudioConfig 方法设置音频编码声道为 Stereo 双声道 (默认为 Mono 单声道)。
此处示例通过预设枚举构造 ZegoAudioConfig 设置为双声道:
ZegoAudioConfig audioConfig = ZegoAudioConfig(ZEGO_AUDIO_CONFIG_PRESET_STANDARD_QUALITY_STEREO);
ZegoExpressSDK::getEngine()->setAudioConfig(audioConfig);
设置音频编码声道为双声道后,调用 enableVirtualStereo 方法,通过 enable 参数设置虚拟立体声的声源角度后,才有立体声效果。角度范围为 0 ~ 180,一般可设为 90 度(即正前方)。
此处示例为开启虚拟立体声并将角度设置为 90 度:
ZegoExpressSDK::getEngine()->enableVirtualStereo(true, 90);

联系我们
文档反馈