功能描述
在社交娱乐应用中,通常需要美化人声或为人声增添丰富的音效的需求。例如在语聊房场景中,用户可以选择音效来改变自己的声音。SDK 提供自定义人声效果。
相关名词解释如下:
- 变声:通过改变用户的音调,使输出的声音在感官上与原始声音不同,实现男声变女声等效果。
- 混响:通过对声音的特殊处理,制造不同环境的混响效果,让声音如同在音乐厅、大教堂等场景中发出一般。
- 混响回声:通过对声音的特殊处理,可搭配变声、混响以实现自定义各式各样的声音效果,例如空灵,机器人的声音。
- 虚拟立体声:通过深度使用双声道技术,虚拟出发音源的各个位置角度,实现立体声、3D 环绕音、听声辩位等效果。
实现方法
开始前请确保已在你的项目中实现基本的实时音视频功能。
自定义人声效果
以下示例代码展示如何把原始人声变成绿巨人霍克的声音:
// 设置音调。可以在 [0.5, 2.0] 范围内设置。取值越小,则音调越低。默认值为 1.0,表示不需要修改音调。
int nRet = rtcEngine.setLocalVoicePitch(0.5);
// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率是 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_31, -15);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_62, 3);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_125, -9);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_250, -8);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_500, -6);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_1K, -4);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_2K, -3);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_4K, -2);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_8K, -1);
nRet = rtcEngine.setLocalVoiceEqualization(AUDIO_EQUALIZATION_BAND_16K, 1);
// 原始人声强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB
nRet = rtcEngine.setLocalVoiceReverb(AUDIO_REVERB_DRY_LEVEL, 10);
// 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB
nRet = rtcEngine.setLocalVoiceReverb(AUDIO_REVERB_WET_LEVEL, 7);
// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。取值范围 [0,100]
nRet = rtcEngine.setLocalVoiceReverb(AUDIO_REVERB_ROOM_SIZE, 6);
// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
nRet = rtcEngine.setLocalVoiceReverb(AUDIO_REVERB_WET_DELAY, 124);
// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
nRet = rtcEngine.setLocalVoiceReverb(AUDIO_REVERB_STRENGTH, 78);
API 参考
预设的人声效果:
setAudioEffectPreset
setAudioEffectParameters
setVoiceBeautifierPreset
自定义人声效果:
开发注意事项
- 本文所有方法对人声的处理效果最佳,不推荐调用这类方法处理含音乐的音频数据。