在社交娱乐应用中,为增添场景的趣味性并提升互动体验,通常需要设置人声效果。例如在语聊房场景中,用户可以选择音效来增添自己声音的立体感。声网 SDK 提供预设的人声效果,也支持通过音调、声音均衡和混响等设置自定义人声效果。你可以通过声网提供的在线 Demo 体验 SDK 预设的人声效果。
声网在 GitHub 上提供以下实现了美声与音效功能的开源示例项目,你可以前往下载体验或参考源代码。
为满足不同场景对人声效果的需求,SDK 提供 setVoiceBeautifierPreset
和 setAudioEffectPreset
方法,你可以使用以下预设的人声效果:
人声效果 | 适用场景 | |
---|---|---|
美声 setVoiceBeautifierPreset |
语聊美声 | 以说话声为主的音视频场景: |
歌唱美声 | 以歌声为主的音视频场景: |
|
音色变换 | 以说话声或歌声为主的音视频场景: |
|
音效 setAudioEffectPreset |
变声音效 | 以说话声为主的音视频场景: |
曲风音效 | 以歌声为主的音视频场景: |
|
空间塑造 | 以说话声或歌声为主的音视频场景: |
|
电音音效 | 以歌声为主的音视频场景: |
|
变声 setVoiceConversionPreset |
基础变声 | 以说话声或歌声为主的音视频场景: |
语聊美声是指在不改变原声辨识度的前提下,根据男女声各自的特点美化说话声。
通过 setVoiceBeautifierPreset
中以下枚举值,你可以实现语聊美声效果:
枚举值 | 描述 |
---|---|
AgoraChatBeautifierMagnetic |
磁性(男)。请确保使用该枚举美化男声,否则音频可能会产生失真。 |
AgoraChatBeautifierFresh |
清新(女)。请确保使用该枚举美化女声,否则音频可能会产生失真。 |
AgoraChatBeautifierVitality |
活力(女)。请确保使用该枚举美化女声,否则音频可能会产生失真。 |
// Swift
// 预设人声效果为磁性(男)。
agoraKit.setVoiceBeautifierPreset(.chatBeautifierMagnetic)
// 关闭人声效果。
agoraKit.setVoiceBeautifierPreset(.voiceBeautifierOff)
// Objective-C
// 预设人声效果为磁性(男)。
[self.agoraKit setVoiceBeautifierPreset: AgoraChatBeautifierMagnetic];
// 关闭人声效果。
[self.agoraKit setVoiceBeautifierPreset: AgoraVoiceBeautifierOff];
歌唱美声是指在保留歌声原有特点的前提下,根据男女声各自的特点美化歌声并添加混响效果。
通过 AgoraSingingBeautifier
枚举值,你可以实现歌唱美声效果。
setVoiceBeautifierPreset(AgoraSingingBeautifier)
,你可以美化男声并添加歌声在小房间的混响效果。请勿用于设置女声,否则音频会失真。setVoiceBeautifierParameters(AgoraSingingBeautifier, param1, param2)
,你可以美化男声或女声并添加混响效果。// Swift
// 预设人声效果为歌唱美声。
agoraKit.setVoiceBeautifierPreset(.singingBeautifier)
// 美化女声并添加歌声在大厅的混响效果。
agoraKit.setVoiceBeautifierParameters(.singingBeautifier, 2, 3)
// 关闭人声效果。
agoraKit.setVoiceBeautifierPreset(.voiceBeautifierOff)
// Objective-C
// 预设人声效果为歌唱美声。
[self.agoraKit setVoiceBeautifierPreset: AgoraSingingBeautifier];
// 美化女声并添加歌声在大厅的混响效果。
[self.agoraKit setVoiceBeautifierParameters: AgoraSingingBeautifier param1:2 param2:3];
// 关闭人声效果。
[self.agoraKit setVoiceBeautifierPreset: AgoraVoiceBeautifierOff];
音色变换可以让人声的音色朝特定的方向改变,用户可以选择最合适自己的效果。
通过 setVoiceBeautifierPreset
中以下枚举值,你可以实现音色变换效果:
枚举值 | 描述 |
---|---|
AgoraTimbreTransformationVigorous |
浑厚。 |
AgoraTimbreTransformationDeep |
低沉。 |
AgoraTimbreTransformationMellow |
圆润。 |
AgoraTimbreTransformationFalsetto |
假音。 |
AgoraTimbreTransformationFull |
饱满。 |
AgoraTimbreTransformationClear |
清澈。 |
AgoraTimbreTransformationResounding |
高亢。 |
AgoraTimbreTransformationRinging |
嘹亮。 |
// Swift
// 预设人声效果为浑厚。
agoraKit.setVoiceBeautifierPreset(.timbreTransformationVigorous)
// 关闭人声效果。
agoraKit.setVoiceBeautifierPreset(.voiceBeautifierOff)
// Objective-C
// 预设人声效果为浑厚。
[self.agoraKit setVoiceBeautifierPreset: AgoraTimbreTransformationVigorous];
// 关闭人声效果。
[self.agoraKit setVoiceBeautifierPreset: AgoraVoiceBeautifierOff];
变声音效可以改变原声,起到增添趣味性等作用。该效果下的声音不太自然,听众能辨认出用户使用了变声效果。
通过 setAudioEffectPreset
中以下枚举值,你可以实现变声音效:
枚举值 | 描述 |
---|---|
AgoraVoiceChangerEffectUncle |
大叔。建议用于处理男声,否则无法达到预期效果。 |
AgoraVoiceChangerEffectOldMan |
老年男性。建议用于处理男声,否则无法达到预期效果。 |
AgoraVoiceChangerEffectBoy |
男孩。建议用于处理男声,否则无法达到预期效果。 |
AgoraVoiceChangerEffectSister |
少女。建议用于处理女声,否则无法达到预期效果。 |
AgoraVoiceChangerEffectGirl |
女孩。建议用于处理女声,否则无法达到预期效果。 |
AgoraVoiceChangerEffectPigKing |
猪八戒。 |
AgoraVoiceChangerEffectHulk |
绿巨人。 |
// Swift
// 预设人声效果为绿巨人。
agoraKit.setAudioEffectPreset(.voiceChangerEffectHulk)
// 关闭人声效果。
agoraKit.setAudioEffectPreset(.audioEffectOff)
// Objective-C
// 预设人声效果为绿巨人。
[self.agoraKit setAudioEffectPreset: AgoraVoiceChangerEffectHulk];
// 关闭人声效果。
[self.agoraKit setAudioEffectPreset: AgoraAudioEffectOff];
曲风音效可以在演唱特定风格的歌曲时,使歌声与伴奏更加契合。
通过 setAudioEffectPreset
中以下枚举值,你可以实现曲风音效:
枚举值 | 描述 |
---|---|
AgoraStyleTransformationPopular |
流行。 |
AgoraStyleTransformationRnB |
R&B。 |
// Swift
// 预设人声效果为流行。
agoraKit.setAudioEffectPreset(.styleTransformationPopular)
// 关闭人声效果。
agoraKit.setAudioEffectPreset(.audioEffectOff)
// Objective-C
// 预设人声效果为流行。
[self.agoraKit setAudioEffectPreset: AgoraStyleTransformationPopular];
// 关闭人声效果。
[self.agoraKit setAudioEffectPreset: AgoraAudioEffectOff];
空间塑造是指通过空间混响效果营造一定的空间氛围,让人声仿佛从特定的场地中传出。
通过 setAudioEffectPreset
中以下枚举值,你可以实现空间塑造效果:
枚举值 | 描述 |
---|---|
AgoraRoomAcousticsKTV |
KTV。 |
AgoraRoomAcousticsVocalConcert |
演唱会。 |
AgoraRoomAcousticsStudio |
录音棚。 |
AgoraRoomAcousticsPhonograph |
留声机。 |
AgoraRoomAcousticsVirtualStereo |
虚拟立体声,即 SDK 将单声道的音频渲染出双声道的音效。 Note setAudioProfile 的 profile 参数设置为 AgoraAudioProfileMusicStandardStereo(3) 或 AgoraAudioProfileMusicHighQualityStereo(5) ,否则该枚举设置无效。setAudioProfile 的 scenario 参数设为 AgoraAudioScenarioGameStreaming(3) 。 |
AgoraRoomAcousticsSpacial |
空旷。 |
AgoraRoomAcousticsEthereal |
空灵。 |
AgoraRoomAcoustics3DVoice |
3D 人声,即 SDK 将音频渲染出在用户周围环绕的效果,环绕周期为 10 秒。设置该音效后,你还可以调用 setAudioEffectParameters 修改环绕周期。Note setAudioProfile 的 profile 参数设置为 AgoraAudioProfileMusicStandardStereo(3) 或 AgoraAudioProfileMusicHighQualityStereo(5) ,否则该枚举设置无效。setAudioProfile 的 scenario 参数设为 AgoraAudioScenarioGameStreaming(3) 。 |
// Swift
// 预设人声效果为 3D 人声。
agoraKit.setAudioEffectPreset(.roomAcoustics3DVoice)
// 将环绕周期设置为 30 秒。
agoraKit.setAudioEffectParameters(.roomAcoustics3DVoice, 30, 0)
// 关闭人声效果。
agoraKit.setAudioEffectPreset(.audioEffectOff)
// Objective-C
// 预设人声效果为 3D 人声。
[self.agoraKit setAudioEffectPreset: AgoraRoomAcoustics3DVoice];
// 将环绕周期设置为 30 秒。
[self.agoraKit setAudioEffectParameters: AgoraRoomAcoustics3DVoice param1:30 param2:0];
// 关闭人声效果。
[self.agoraKit setAudioEffectPreset: AgoraAudioEffectOff];
电音音效是指对歌声进行修音,使其与伴奏的调式和主音音高完全匹配的效果。
通过 setAudioEffectPreset
中以下枚举值,你可以实现电音音效:
枚举值 | 描述 |
---|---|
AgoraPitchCorrection |
电音,即 SDK 以主音音高为 C 的自然大调为基础修正音频的实际音高。设置该音效后,你还可以调用 setAudioEffectParameters 调整修音的基础调式和主音音高。 |
// Swift
// 预设人声效果为电音音效。
agoraKit.setAudioEffectPreset(.pitchCorrection)
// 将电音音效设置为主音音高为 D 的自然小调。
agoraKit.setAudioEffectParameters(.pitchCorrection, 2, 6)
// 关闭人声效果。
agoraKit.setAudioEffectPreset(.audioEffectOff)
// Objective-C
// 预设人声效果为电音音效。
[self.agoraKit setAudioEffectPreset: AgoraPitchCorrection];
// 将电音音效设置为主音音高为 D 的自然小调。
[self.agoraKit setAudioEffectParameters: AgoraPitchCorrection param1:2 param2:6];
// 关闭人声效果。
[self.agoraKit setAudioEffectPreset: AgoraAudioEffectOff];
基础变声可以自然地改变原声,起到匿名等作用。听众在没听过原声的情况下,无法辨认用户是否使用了变声效果。
通过 setVoiceConversionPreset
中以下枚举值,你可以实现基础变声效果:
枚举值 | 描述 |
---|---|
AgoraVoiceConversionOff |
原声,即关闭变声效果。 |
AgoraVoiceChangerNeutral |
中性。为避免音频失真,请确保仅对女声设置该效果。 |
AgoraVoiceChangerSweet |
甜美。为避免音频失真,请确保仅对女声设置该效果。 |
AgoraVoiceChangerSolid |
稳重。为避免音频失真,请确保仅对男声设置该效果。 |
AgoraVoiceChangerBass |
低沉。为避免音频失真,请确保仅对男声设置该效果。 |
// Swift
// 预设变声效果为更中性化的声音。
agoraKit.setVoiceConversionPreset(.voiceChangerNeutral)
// 关闭变声效果。
agoraKit.setVoiceConversionPreset(.voiceConversionOff)
// Objective-C
// 预设变声效果为更中性化的声音。
[self.agoraKit setVoiceConversionPreset: AgoraVoiceChangerNeutral];
// 关闭变声效果。
[self.agoraKit setVoiceConversionPreset: AgoraVoiceConversionOff];
如果预设效果无法满足你的需求,你还可以通过 setLocalVoicePitch
、setLocalVoiceEqualization
和 setLocalVoiceReverb
自行调整音调、均衡和混响效果,获取想要的人声效果。
以下示例代码展示如何把原始人声变成绿巨人浩克的声音:
// Swift
// 设置音调。可以在 [0.5, 2.0] 范围内设置。取值越小,则音调越低。默认值为 1.0,表示不需要修改音调。
agoraKit.setLocalVoicePitch(1)
// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率是 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
agoraKit.setLocalVoiceEqualizationOf(.band31, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band62, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band125, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band250, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band500, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band1K, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band2K, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band4K, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band8K, withGain: 0)
agoraKit.setLocalVoiceEqualizationOf(.band16K, withGain: 0)
// 原始人声强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB
agoraKit.setLocalVoiceReverbOf(.dryLevel, withValue: -1)
// 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB
agoraKit.setLocalVoiceReverbOf(.wetLevel, withValue: -7)
// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。取值范围 [0,100]
agoraKit.setLocalVoiceReverbOf(.roomSize, withValue: 57)
// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
agoraKit.setLocalVoiceReverbOf(.wetDelay, withValue: 135)
// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
agoraKit.setLocalVoiceReverbOf(.strength, withValue: 45)
// Objective-C
// 设置音调。可以在 [0.5, 2.0] 范围内设置。取值越小,则音调越低。默认值为 1.0,表示不需要修改音调。
[agoraKit setLocalVoicePitch: 1];
// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率是 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand31 withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand62 withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand125 withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand250 withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand500 withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand1K withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand2K withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand4K withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand8K withGain: 0];
[agoraKit setLocalVoiceEqualizationOfBandFrequency:AgoraAudioEqualizationBand16K withGain: 0];
// 原始人声强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB
[agoraKit setLocalVoiceReverbOfType:AgoraAudioReverbDryLevel withValue: -1];
// 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB
[agoraKit setLocalVoiceReverbOfType:AgoraAudioReverbWetLevel withValue: -7];
// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。取值范围 [0,100]
[agoraKit setLocalVoiceReverbOfType:AgoraAudioReverbRoomSize withValue: 57];
// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
[agoraKit setLocalVoiceReverbOfType:AgoraAudioReverbWetDelay withValue: 135];
// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
[agoraKit setLocalVoiceReverbOfType:AgoraAudioReverbStrength withValue: 45];
预设的人声效果:
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
setVoiceBeautifierParameters
setVoiceConversionPreset
自定义人声效果:
setAudioProfile
的 profile
参数设置为 AgoraAudioProfileSpeechStandard(1)
,否则以下方法不生效:setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
setVoiceBeautifierParameters
setVoiceConversionPreset
setAudioEffectPreset
setVoiceBeautifierPreset
setAudioEffectParameters
setVoiceBeautifierParameters
setVoiceConversionPreset
setLocalVoicePitch
setLocalVoiceEqualizationOfBandFrequency
setLocalVoiceReverbOfType