设置人声效果
在社交娱乐场景中,为增添场景的趣味性并提升互动体验,通常需要设置人声效果,如语聊美声、歌唱美声、音色变换等,例如,在 KTV 场景中,主播可以使用立体声音效增添自己声音的立体感,快速吸引大量听众。
本文介绍如何在你的项目中实现人声效果。
技术原理
声网提供封装在枚举中的预设人声效果参数,帮助你在项目中快速集成人声效果。
调用以下方法设置需要的人声效果:
- 调用
setVoiceBeautifierPreset
方法,设置语聊美声、歌唱美声、音色变换等效果。 - 调用
setAudioEffectPreset
方法,设置变声音效、曲风音效、空间塑造等效果。 - 调用
setVoiceConversionPreset
方法,完全改变原始人声。
如果预设效果无法满足你的需求,你还可以通过 setLocalVoicePitch
、setLocalVoiceEqualization
和 setLocalVoiceReverb
自定义人声效果。
你可以通过在线 Demo 体验人声效果。
前提条件
项目已经实现了实现音视频互动。
实现人声效果
本节介绍如何在你的项目中实现各种音效。
-
设置音频场景以获取更好的人声效果
在你的声网项目中,打开管理
RtEngine
初始化的文件并添加以下代码:Java// 将 RtcEngineConfig 中的 mAudioScenario 设置为 AUDIO_SCENARIO_GAME_STREAMING
config.mAudioScenario = Constants.AudioScenario.getValue(Constants.AudioScenario.GAME_STREAMING);
mRtcEngine = RtcEngine.create(config);
// 调用 setAudioProfile,将场景设置为 AUDIO_PROFILE_MUSIC_HIGH_QUALITY 或 AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO
mRtcEngine.setAudioProfile(Constants.AudioProfile.getValue(Constants.AudioProfile.MUSIC_HIGH_QUALITY_STEREO)); -
根据需要设置人声效果
同一时间只能设置一种人声效果,否则先设置的人声音效会被后设置的覆盖。
-
语聊美声是指在不改变原声辨识度的前提下,根据男女声各自的特点美化说话声。参考以下代码设置语聊美声:
Java// 将人声效果设置为磁性。该枚举仅适用于美化男声
// 用于美化女声时,会导致失真
mRtcEngine.setVoiceBeautifierPreset(Constants.CHAT_BEAUTIFIER_MAGNETIC);
// 关闭人声效果
mRtcEngine.setVoiceBeautifierPreset(Constants.VOICE_BEAUTIFIER_OFF); -
歌唱美声是指在保留歌声原有特点的前提下,根据男女声各自的特点美化歌声。参考以下代码设置歌唱美声:
Java// 美化男声歌声。请勿用于设置女声
mRtcEngine.setVoiceBeautifierPreset(Constants.SINGING_BEAUTIFIER);
// 关闭人声效果
mRtcEngine.setVoiceBeautifierPreset(Constants.VOICE_BEAUTIFIER_OFF);
// 美化男声歌声
mRtcEngine.setVoiceBeautifierParameters(Constants.SINGING_BEAUTIFIER, 2, 3);
// 关闭人声效果
mRtcEngine.setVoiceBeautifierPreset(Constants.VOICE_BEAUTIFIER_OFF); -
音色变换可以让人声的音色朝特定的方向改变。参考以下代码设置音色变换:
Java// 设置音色变换效果
// 预设人声效果为浑厚
mRtcEngine.setVoiceBeautifierPreset(Constants.TIMBRE_TRANSFORMATION_VIGOROUS);
// 关闭人声效果
mRtcEngine.setVoiceBeautifierPreset(Constants.VOICE_BEAUTIFIER_OFF); -
变声音效可以改变原声,起到增添趣味性等作用。参考以下代码设置变声音效:
Java// 预设人声效果为绿巨人
mRtcEngine.setAudioEffectPreset(Constants.VOICE_CHANGER_EFFECT_HULK);
// 关闭人声效果
mRtcEngine.setAudioEffectPreset(Constants.AUDIO_EFFECT_OFF); -
曲风音效可以在演唱特定风格的歌曲时,使歌声与伴奏更加契合。参考以下代码设置曲风音效:
Java// 预设人声效果为流行
mRtcEngine.setAudioEffectPreset(Constants.STYLE_TRANSFORMATION_POPULAR);
// 关闭人声效果
mRtcEngine.setAudioEffectPreset(Constants.AUDIO_EFFECT_OFF); -
空间塑造是指通过空间混响效果营造一定的空间氛围,让人声彷佛从特定的场地中传出。参考以下代码设置空间塑造:
Java// 预设人声效果为在 KTV 中的效果
mRtcEngine.setAudioEffectPreset(Constants.ROOM_ACOUSTICS_KTV);
// 关闭人声效果
mRtcEngine.setAudioEffectPreset(Constants.AUDIO_EFFECT_OFF); -
电音音效是指对歌声进行修音,使其与伴奏的调式和主音音高完全匹配的效果。参考以下代码设置电音音效:
Java// 将电音音效设置为主音音高为 C 的自然小调
mRtcEngine.setAudioEffectPreset(Constants.PITCH_CORRECTION);
// 关闭人声效果
mRtcEngine.setAudioEffectPreset(Constants.AUDIO_EFFECT_OFF); -
基础变声可以自然地改变原声,起到匿名等作用。参考以下代码设置基础变声:
Java// 预设变声效果为更中性化的声音
mRtcEngine.setVoiceConversionPreset(Constants.VOICE_CHANGER_NEUTRAL);
// 关闭人声效果
mRtcEngine.setVoiceConversionPreset(Constants.VOICE_CONVERSION_OFF); -
通过调整音调、均衡和混响效果自定义人声效果。
以下示例代码展示如何通过手动设置参数值把原始人声变成绿巨人的声音:
Javadouble pitch = 0.5;
mRtcEngine.setLocalVoicePitch(pitch);
// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率视 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(0), -15);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(1), 3);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(2), -9);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(3), -8);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(4), -6);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(5), -4);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(6), -3);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(7), -2);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(8), -1);
mRtcEngine.setLocalVoiceEqualization(Constants.AUDIO_EQUALIZATION_BAND_FREQUENCY.fromInt(9), 1);
// 原始人声强度,即 dry signal,取值范围 [-20,10],单位为 dB
mRtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_TYPE.fromInt(0), 10);
// 早期反射信号强度,即 wet signal,取值范围 [-20,10],单位为 dB
mRtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_TYPE.fromInt(1), 7);
// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。 取值范围 [0,100]
mRtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_TYPE.fromInt(2), 6);
// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
mRtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_TYPE.fromInt(3), 124);
// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
mRtcEngine.setLocalVoiceReverb(Constants.AUDIO_REVERB_TYPE.fromInt(4), 78);
相关文档
本节提供了在实现人声效果功能时可能需要的相关文档。
示例项目
声网在 GitHub 上提供了一个开源的 VoiceEffects 示例项目。你可以前往下载或查看其中的源代码。
API 参考
预设的人声效果
setVoiceBeautifierPreset
、setAudioEffectPreset
、setVoiceConversionPreset
中的部分枚举适用于不同性别,需要加以区分。如果用于不适用的性别人声,会导致失真。详见以下 API 参考:
setVoiceBeautifierPreset
setAudioEffectPreset
setVoiceConversionPreset
setAudioEffectParameters
setVoiceBeautifierParameters