美声与音效

最近更新时间:2022-09-20 05:17:40

功能描述

在社交娱乐应用中,通常需要美化人声或为人声增添丰富的音效的需求。例如在语聊房场景中,用户可以选择音效来改变自己的声音。SDK 提供自定义人声效果。

相关名词解释如下:

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

实现方法

开始前请确保已在你的项目中实现基本的实时音视频功能。

使用预设的人声效果

为满足不同场景中对人声效果的需求,SDK 预设了以下人声效果:

人声效果适用场景
美声语聊美声以说话声为主的音视频场景:
语音相亲
情感电台
语音连麦直播
语聊房
开黑语音
音色变换以说话声或歌声为主的音视频场景:
语音连麦直播
语音 PK 直播
语聊房
语音相亲
K 歌房
FM 电台
音效变声音效以说话声为主的音视频场景:
语音连麦直播
语音 PK 直播
语聊房
开黑语音
曲风音效以歌声为主的音视频场景:
K 歌房
音乐电台
直播秀场
空间塑造以说话声或歌声为主的音视频场景:
语音连麦直播
语音 PK 直播
语聊房
开黑语音
语音相亲
K 歌房
FM 电台

通过调用 setLocalVoiceChanger 或 setLocalVoiceReverbPreset 方法,你可以使用 SDK 预设的人声效果。

调用该方法前,你需要将 setAudioProfileprofile 参数设置为 AUDIO_PROFILE_MUSIC_HIGH_QUALITY(4)AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO(5),且 scenario 参数设置为 AUDIO_SCENARIO_GAME_STREAMING(3)

setLocalVoiceChangersetLocalVoiceReverbPreset 中预设的人声效果互斥。如果先后调用这两个方法,则先调用的方法会不生效。

语聊美声

语聊美声是指在不改变原声辨识度的前提下,根据男女声各自的特点美化说话声。

通过 setLocalVoiceChanger 中以下枚举值,你可以实现语聊美声效果:

枚举值描述
GENERAL_BEAUTY_VOICE_MALE_MAGNETIC磁性(男)。请确保使用该枚举美化男声,否则音频可能会产生失真。
GENERAL_BEAUTY_VOICE_FEMALE_FRESH清新(女)。请确保使用该枚举美化女声,否则音频可能会产生失真。
GENERAL_BEAUTY_VOICE_FEMALE_VITALITY活力(女)。请确保使用该枚举美化女声,否则音频可能会产生失真。
// 预设人声效果为磁性(男)。
mRtcEngine.setLocalVoiceChanger(GENERAL_BEAUTY_VOICE_MALE_MAGNETIC);
// 关闭人声效果。
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_OFF);

音色变换

音色变换可以让人声的音色朝特定的方向改变,用户可以选择最合适自己的效果。

通过 setLocalVoiceChanger 中以下枚举值,你可以实现音色变换效果:

枚举值描述
VOICE_BEAUTY_VIGOROUS浑厚。
VOICE_BEAUTY_DEEP低沉。
VOICE_BEAUTY_MELLOW圆润。
VOICE_BEAUTY_FALSETTO假音。
VOICE_BEAUTY_FULL饱满。
VOICE_BEAUTY_CLEAR清澈。
VOICE_BEAUTY_RESOUNDING高亢。
VOICE_BEAUTY_RINGING嘹亮。
// 预设人声效果为浑厚。
mRtcEngine.setLocalVoiceChanger(VOICE_BEAUTY_VIGOROUS);
// 关闭人声效果。
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_OFF);

变声音效

变声音效是指将说话声朝着特定的方向进行调整,以达到区别原声的效果。

通过 setLocalVoiceChangersetLocalVoiceReverbPreset 中以下枚举值,你可以实现变声音效:

方法枚举值描述
setLocalVoiceChangerVOICE_CHANGER_OLDMAN老男人,建议用于处理男声。
VOICE_CHANGER_BABYBOY小男孩,建议用于处理男声。
VOICE_CHANGER_BABYGIRL小女孩,建议用于处理女声。
VOICE_CHANGER_ZHUBAJIE猪八戒。
VOICE_CHANGER_HULK绿巨人。
setLocalVoiceReverbPresetAUDIO_REVERB_FX_UNCLE大叔,建议用于处理男声。
AUDIO_REVERB_FX_SISTER
// 预设人声效果为绿巨人。
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_HULK);
// 关闭人声效果。
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_OFF);
// 预设人声效果为大叔。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_FX_UNCLE);
// 关闭人声效果。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_OFF);

曲风音效

曲风音效可以在演唱特定风格的歌曲时,使歌声与伴奏更加契合。

通过 setLocalVoiceReverbPreset 中以下枚举值,你可以实现曲风音效:

为达到更好的人声效果,AR 推荐使用以 AUDIO_REVERB_FX 为前缀的枚举值。

枚举值描述
AUDIO_REVERB_FX_POPULAR流行。
AUDIO_REVERB_POPULAR流行(旧版)。
AUDIO_REVERB_FX_RNBR&B。
AUDIO_REVERB_RNBR&B(旧版)。
AUDIO_REVERB_ROCK摇滚。
AUDIO_REVERB_HIPHOP嘻哈。
// 预设人声效果为流行。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_FX_POPULAR);
// 关闭人声效果。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_OFF);

空间塑造

空间塑造是指通过空间混响效果营造一定的空间氛围,让人声仿佛从特定的场地中传出。

通过 setLocalVoiceChangersetLocalVoiceReverbPreset 中以下枚举值,你可以实现空间塑造效果:

为达到更好的人声效果,AR 推荐使用以 AUDIO_REVERB_FX 为前缀的枚举值。

AR 推荐在使用 AUDIO_VIRTUAL_STEREO 前将 setAudioProfileprofile 参数设置为 AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO(5)

方法枚举值描述
setLocalVoiceChangerVOICE_BEAUTY_SPACIAL空旷。
VOICE_CHANGER_ETHEREAL空灵。
setLocalVoiceReverbPresetAUDIO_REVERB_FX_VOCAL_CONCERT演唱会。
AUDIO_REVERB_VOCAL_CONCERT演唱会(旧版)。
AUDIO_REVERB_FX_KTVKTV
AUDIO_REVERB_KTVKTV(旧版)。
AUDIO_REVERB_FX_STUDIO录音棚。
AUDIO_REVERB_STUDIO录音棚(旧版)。
AUDIO_REVERB_FX_PHONOGRAPH留声机。
AUDIO_VIRTUAL_STEREO虚拟立体声。虚拟立体声是指将单声道的音轨渲染出立体声的效果,使频道内所有用户听到有空间感的人声效果。
// 预设人声效果为空旷。
mRtcEngine.setLocalVoiceChanger(VOICE_BEAUTY_SPACIAL);
// 关闭人声效果。
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_OFF);
// 预设人声效果为演唱会。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_FX_VOCAL_CONCERT);
// 关闭人声效果。
mRtcEngine.setLocalVoiceReverbPreset(AUDIO_REVERB_OFF);

自定义人声效果

如果预设效果无法满足你的需求,你还可以通过 setLocalVoicePitchsetLocalVoiceEqualizationsetLocalVoiceReverb 自行调整音调、均衡和混响效果,获取想要的人声效果。

以下示例代码展示如何把原始人声变成绿巨人霍克的声音:

// 设置音调。可以在 [0.5,2.0] 范围内设置。取值越小,则音调越低。默认值为 1.0,表示原始音调
double pitch = 0.5;
rtcEngine.setLocalVoicePitch(pitch);

// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率是 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
rtcEngine.setLocalVoiceEqualization(0, -15);
rtcEngine.setLocalVoiceEqualization(1, 3);
rtcEngine.setLocalVoiceEqualization(2, -9);
rtcEngine.setLocalVoiceEqualization(3, -8);
rtcEngine.setLocalVoiceEqualization(4, -6);
rtcEngine.setLocalVoiceEqualization(5, -4);
rtcEngine.setLocalVoiceEqualization(6, -3);
rtcEngine.setLocalVoiceEqualization(7, -2);
rtcEngine.setLocalVoiceEqualization(8, -1);
rtcEngine.setLocalVoiceEqualization(9, 1);

// 原始人声强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB
rtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_DRY_LEVEL, 10);

// 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB
rtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_WET_LEVEL, 7);

// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。取值范围 [0,100]
rtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_ROOM_SIZE, 6);

// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
rtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_WET_DELAY, 124);

// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
rtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_STRENGTH, 78);

开发注意事项

  • 本文所有方法对人声的处理效果最佳,不推荐调用这类方法处理含音乐的音频数据。
  • 建议不要一起使用预设的人声效果和自定义人声效果相关方法,否则可能会发生未定义行为。如需一起使用,你需要在调用预设人声效果相关方法后调用自定义人声效果相关方法,否则自定义人声效果相关方法会不生效。