logo
当前页

变声/混响/立体声


功能简介

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

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

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

说明

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

前提条件

在进行变声/混响/立体声前,请确保:

使用步骤

变声

设置预设变声

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

ZegoVoiceChangerPreset 预置的变声效果如下,开发者可以根据需要选择:

类型名预设值描述变声类型
NONE0无变声-
MEN_TO_CHILD1男声变童声变声
MEN_TO_WOMEN2男声变女声变声
WOMEN_TO_CHILD3女声变童声变声
WOMEN_TO_MEN4女声变男声变声
FOREIGNER5外国人声效变声
OPTIMUS_PRIME6擎天柱声效变声
ANDROID7机器人声效变声
ETHEREAL8空灵声效音色变换
MALE_MAGNETIC9磁性男房间美声
FEMALE_FRESH10清新女房间美声
MAJOR_C11C 大调电音电音音效
MINOR_A12A 小调电音电音音效
HARMONIC_MINOR13和声小调电音电音音效
FEMALE_ENERGETIC14女活力音效房间美声
RICH_NESS15浑厚音效房间美声
MUFFLED16低沉音效房间美声
ROUNDNESS17圆润音效房间美声
FALSETTO18假音音效房间美声
FULLNESS19饱满音效房间美声
CLEAR20清澈音效房间美声
HIGHLY_RESONANT21高亢音效房间美声
LOUD_CLEAR22嘹亮音效房间美声
MINIONS23小黄人音效变声
AUTOBOT30汽车人音效变声
OUT_OF_POWER31没电了音效变声

以下示例代码以男声变童声为例:

ZegoExpressSDK::getEngine()->setVoiceChangerPreset(ZEGO_VOICE_CHANGER_PRESET_MEN_TO_CHILD);

设置自定义变声

若 SDK 预置的变声效果无法满足需求,开发者可以调用 setVoiceChangerParam 方法,通过音高参数 pitch 设置自定义变声,该参数取值范围为 [-12.0, 12.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。

注意

在 2.18.0 及更老版本上,取值范围为 [-8.0, 8.0]。

ZegoVoiceChangerParam param;
param.pitch = 2.0f;
ZegoExpressSDK::getEngine()->setVoiceChangerParam(param);

混响

设置预设混响

调用 setReverbPreset 通过预设枚举设置混响。

ZegoReverbPreset 预置的混响效果如下,开发者可以根据需要选择:

类型名预设值描述混响类型
NONE0-
SOFT_ROOM1小房间空间塑造
LARGE_ROOM2大房间空间塑造
CONCERT_HALL3音乐厅空间塑造
VALLEY4山谷空间塑造
RECORDING_STUDIO5录音室空间塑造
BASEMENT6地下室空间塑造
KTV7KTV,适用于音色瑕疵较为明显的用户空间塑造
POPULAR8流行曲风
ROCK9摇滚曲风
VOCAL_CONCERT10演唱会空间塑造
GRAMO_PHONE11留声机空间塑造
ENHANCED_KTV12增强型 KTV,更集中、亮度更好的 KTV 人声效果,适用于普通用户和专业用户空间塑造

以下示例代码以大房间模式为例:

ZegoExpressSDK::getEngine()->setReverbPreset(ZEGO_REVERB_PRESET_LARGE_ROOM);

设置自定义混响

若 SDK 预设的混响类型无法满足需求,开发者可以调用 setReverbAdvancedParam 方法,通过相关参数搭配设置,实现开发者需要的混响效果(详细参数说明请参考 API 文档)。

ZegoReverbAdvancedParam reverbParam;
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;
ZegoExpressSDK::getEngine()->setReverbAdvancedParam(reverbParam);
注意

当设置自定义混响参数后,启用混响时设置的预设混响效果则会失效。如果想再次使用 SDK 预设参数,可以使用的 setReverbPreset 预设枚举方法进行设置。

混响回声

调用 setReverbEchoParam 方法,通过相关参数搭配设置,实现开发者需要的混响回声效果(详细参数说明请参考 API 文档)。

以下示例代码以实现空灵效果为例:

ZegoReverbEchoParam echoParamEthereal;
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};
ZegoExpressSDK::getEngine()->setReverbEchoParam(echoParamEthereal);

虚拟立体声

设置推流音频声道数

如果需要开启虚拟立体声功能,必须在推流前先调用 setAudioConfig 方法设置音频编码声道为 Stereo 双声道 (默认为 Mono 单声道)。

此处示例通过预设枚举构造 ZegoAudioConfig 设置为双声道:

ZegoAudioConfig audioConfig = ZegoAudioConfig(ZEGO_AUDIO_CONFIG_PRESET_STANDARD_QUALITY_STEREO);
ZegoExpressSDK::getEngine()->setAudioConfig(audioConfig);

设置虚拟立体声参数

设置音频编码声道为双声道后,调用 enableVirtualStereo 方法,通过 enable 参数开启虚拟立体声,并通过 angle 参数设置虚拟立体声的声源角度后才有立体声效果,角度范围为 0~360,一般可设为 90 度(即正前方)。

说明

自从 2.15.0 版本开始,SDK 新增支持全方位虚拟立体声效果,使用方式为将 “angle” 角度参数设置为 “-1”。

此处示例为开启虚拟立体声并将角度设置为 90 度:

ZegoExpressSDK::getEngine()->enableVirtualStereo(true, 90);

此处示例为开启全方位虚拟立体声:

ZegoExpressSDK::getEngine()->enableVirtualStereo(true, -1);
2024-02-27

Previous

自定义音频采集与渲染

Next

原始音频数据获取