当前位置 : 主页 > 编程语言 > 其它开发 >

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

来源:互联网 收集:自由互联 发布时间:2022-05-30
在直播、语聊房、K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混
在直播、语聊房、K 歌房场景中,为增加趣味性和互动性,玩家可以通过变声来搞怪,通过混响烘托气氛,通过立体声使声音更具立体感。ZegoExpress SDK 提供了多种预设的变声、混响、混响回声、立体声效果,开发者可以灵活设置自己想要的声音,在通话或直播过程中动态调整变声、混响、混响回声、虚拟立体声,如果需要试听,可以启用耳返进行测试。 1 前言

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

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

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

本文将教你如何通过即构ZEGO sdk在Android端实现变声、混响、立体声。

2 示例源码下载

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

相关源码请查看 “/ZegoExpressExample/AdvancedAudioProcessing/src/main/java/im/zego/advancedaudioprocessing/voicechange” 目录下的文件。

3 项目准备

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

  • 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现流程。
  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。

** 接下来我们看看完整的实现流程。**

4 实现流程 4.1 变声 4.1.1 设置预设变声

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

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

类型名 描述 变声类型 NONE 无变声 - MEN_TO_CHILD 男声变童声 变声 MEN_TO_WOMEN 男声变女声 变声 WOMEN_TO_CHILD 女声变童声 变声 WOMEN_TO_MEN 女声变男声 变声 FOREIGNER 外国人声效 变声 OPTIMUS_PRIME 擎天柱声效 变声 ANDROID 机器人声效 变声 ETHEREAL 空灵声效 音色变换 MALE_MAGNETIC 磁性男 房间美声 FEMALE_FRESH 清新女 房间美声 MAJOR_C C大调电音 电音音效 MINOR_A A小调电音 电音音效 HARMONIC_MINOR 和声小调电音 电音音效

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

ZegoExpressEngine.getEngine().setVoiceChangerPreset(ZegoVoiceChangerPreset.MEN_TO_CHILD);
4.1.2 设置自定义变声

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

ZegoVoiceChangerParam voiceChangerParam = new ZegoVoiceChangerParam();
param.pitch = 2.0f;
ZegoExpressEngine.getEngine().setVoiceChangerParam(param);
4.2 混响 4.2.1 设置预设混响

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

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

类型名 描述 混响类型 NONE 无 - SOFT_ROOM 小房间 空间塑造 LARGE_ROOM 大房间 空间塑造 CONCERT_HALL 音乐厅 空间塑造 VALLEY 山谷 空间塑造 RECORDING_STUDIO 录音室 空间塑造 BASEMENT 地下室 空间塑造 KTV KTV 空间塑造 POPULAR 流行 曲风 ROCK 摇滚 曲风 VOCAL_CONCERT 演唱会 空间塑造 GRAMO_PHONE 留声机 空间塑造

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

ZegoExpressEngine.getEngine().setReverbPreset(ZegoReverbPreset.LARGE_ROOM);
4.2.2 设置自定义混响

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

ZegoReverbAdvancedParam reverbParam = new ZegoReverbAdvancedParam();
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.getEngine().setReverbAdvancedParam(reverbParam);

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

4.3 混响回声

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

以下示例代码以实现“空灵声效”为例:

ZegoReverbEchoParam echoParam = new ZegoReverbEchoParam();
echoParam.inGain= 0.8f;
echoParam.outGain =1.0f;
echoParam.numDelays = 7;
int[] delay ={230,460,690,920,1150,1380,1610};
echoParam.delay=delay;

float[] decay={0.41f,0.18f,0.08f,0.03f,0.009f,0.003f,0.001f};
echoParam.decay=decay;
zegoReverbEchoParamDatas.add(echoParam);
ZegoExpressEngine.getEngine().setReverbEchoParam(echoParam);
4.4 虚拟立体声 4.4.1 设置推流音频声道数

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

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

ZegoAudioConfig audioConfig = new ZegoAudioConfig(STANDARD_QUALITY_STEREO);
ZegoExpressEngine.getEngine().setAudioConfig(audioConfig);
4.4.2 设置虚拟立体声参数

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

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

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

ZegoExpressEngine.getEngine().enableVirtualStereo(true, 90);

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

ZegoExpressEngine.getEngine().enableVirtualStereo(true, -1);
5 API参考列表 方 描述 setVoiceChangerPreset 通过预设枚举设置变声 ZegoVoiceChangerParam 变声器参数 setReverbPreset 通过预设枚举设置混响 ZegoReverbAdvancedParam 音频混响高级参数 setReverbEchoParam 设置混响回声效果 ZegoReverbParam 设置自定义混响 setAudioConfig 设置音频配置 enableVirtualStereo 设置虚拟立体声 6 小结

使用 ZEGO sdk,仅一两行代码即可实现生动有趣的变声/混响/立体声等音效,快来试试吧!

7 获取更多文档、Demo、技术帮助

获取 SDK 开发文档、demo,可访问 即构文档中心.
获取更多商务活动热门产品,可提交 信息联系商务.
注册即构ZEGO开发者帐号,快速开始。

音视频场景解决方案分享,更多详情可搜索官网(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)
网友评论