在直播、语聊房、K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZEGO Express SDK 提供了多种预设的变声、混响、立体声效果,开发者可以灵活设置自己想要的声音,如果需要试听,可以启用耳返进行测试。
您可通过 ZEGO 提供的 音效体验 DEMO 体验 SDK 预设的人声效果。
在进行变声/混响/立体声之前,请确保:
有两种方式设置变声,分别为预设变声和自定义变声。
// 变声模块引入
import {VoiceChanger} from "zego-express-engine-webrtc/voice-changer";
// 需要在 new ZegoExpressEngine 前调用
ZegoExpressEngine.use(VoiceChanger);
// 初始化实例
const zg = new ZegoExpressEngine(appID, server);
// 创建媒体流
const localstream = await zg.createZegoStream();
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 | 嘹亮音效 | 房间美声 |
以下示例代码以“男声变童声”为例:
// localStream 为通过 createZegoStream 创建的 zego 流对象
zg.setVoiceChangerPreset(1, localStream);
若 SDK 预置的变声效果无法满足需求,开发者可以调用 setVoiceChangerParam 中 "voiceParam" 参数值设置自定义变声。该参数取值范围为 [-12.0, 12.0],值越大声音越尖锐,默认值为 “0.0”(即无变声)。
// localStream 为通过 createZegoStream 创建的 zego 流对象
zg.setVoiceChangerParam(localStream, 5);
调用 createZegoStream 接口,创建 ZegoLocalStream 媒体流,示例代码请参考 变声 的第 1 步。
调用 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 人声效果,适用于普通用户和专业用户 |
空间塑造 |
以下示例代码以“大房间”模式为例:
// localStream 为通过 createZegoStream 创建的 zego 流对象
zg.setReverbPreset(localStream, 2);
Web SDK 暂不支持自定义混响效果。
如果需要开启虚拟立体声功能,必须在创建 ZegoLocalStream 媒体流时设置双声道,即调用 createZegoStream 方法时,设置 ZegoStreamOptions.camera.audio.channelCount 为 2(默认为单声道)。
示例代码为创建一个双声道的纯音频媒体流。
const localStream = await zg.createZegoStream({
camera: {
video: false,
audio: {
channelCount: 2
},
}
});
设置音频编码声道为双声道后,调用 enableVirtualStereo 方法,通过 “enable” 参数开启虚拟立体声,并通过 “angle” 参数设置虚拟立体声的声源角度后,才有立体声效果。角度范围为 0 ~ 360,一般可设为 90 度(即正前方)。
SDK 支持全方位虚拟立体声效果,使用方式为将 “angle” 角度参数设置为 “-1”。
此处示例为开启虚拟立体声并将角度设置为 90 度:
zg.enableVirtualStereo(localStream, true, 90);
此处示例为开启全方位虚拟立体声:
zg.enableVirtualStereo(localStream, true, -1);
在 Safari 浏览器上,拉流方开启麦克风采集时,为什么没有立体声效果了?
在拉流方开启麦克风采集的情况下,拉流渲染的声音会变成 单声道
效果。如果需要在拉流时保持 立体声
效果,拉流方应关闭麦克风采集。
联系我们
文档反馈