美声与音效

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

功能描述

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

相关名词解释如下:

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

实现方法

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

自定义人声效果

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

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

// 设置本地人声均衡波段的中心频率
// 第 1 个参数为频谱子带索引,取值范围 [0,9],分别代表 10 个频带,对应的中心频率是 [31,62,125,250,500,1000,2000,4000,8000,16000] Hz
// 第 2 个参数为每个频率区间的增益值,取值范围 [-15,15],单位 dB, 默认值为 0
rtcKit.setLocalVoiceEqualizationOf(.band31, withGain: -15)
rtcKit.setLocalVoiceEqualizationOf(.band62, withGain: 3)
rtcKit.setLocalVoiceEqualizationOf(.band125, withGain: -9)
rtcKit.setLocalVoiceEqualizationOf(.band250, withGain: -8)
rtcKit.setLocalVoiceEqualizationOf(.band500, withGain: -6)
rtcKit.setLocalVoiceEqualizationOf(.band1K, withGain: -4)
rtcKit.setLocalVoiceEqualizationOf(.band2K, withGain: -3)
rtcKit.setLocalVoiceEqualizationOf(.band4K, withGain: -2)
rtcKit.setLocalVoiceEqualizationOf(.band8K, withGain: -1)
rtcKit.setLocalVoiceEqualizationOf(.band16K, withGain: 1)


rtcKit.setLocalVoiceEqualization(1, 3)
rtcKit.setLocalVoiceEqualization(2, -9)
rtcKit.setLocalVoiceEqualization(3, -8)
rtcKit.setLocalVoiceEqualization(4, -6)
rtcKit.setLocalVoiceEqualization(5, -4)
rtcKit.setLocalVoiceEqualization(6, -3)
rtcKit.setLocalVoiceEqualization(7, -2)
rtcKit.setLocalVoiceEqualization(8, -1)
rtcKit.setLocalVoiceEqualization(9, 1)

// 原始人声强度,即所谓的 dry signal,取值范围 [-20,10],单位为 dB
rtcKit.setLocalVoiceReverbOf(.dryLevel, withValue: 10)

// 早期反射信号强度,即所谓的 wet signal,取值范围 [-20,10],单位为 dB
rtcKit.setLocalVoiceReverbOf(.wetLevel, withValue: 7)

// 所需混响效果的房间尺寸,一般房间越大,混响效果越强。取值范围 [0,100]
rtcKit.setLocalVoiceReverbOf(.roomSize, withValue: 6)

// Wet signal 的初始延迟长度,取值范围 [0,200],单位为 ms
rtcKit.setLocalVoiceReverbOf(.wetDelay, withValue: 124)

// 混响效果持续的强度,取值范围为 [0,100],值越大,混响效果越强
rtcKit.setLocalVoiceReverbOf(.strength, withValue: 78)

API 参考

自定义人声效果:

  • setLocalVoicePitch
  • setLocalVoiceEqualization
  • setLocalVoiceReverb

开发注意事项

  • 本文所有方法对人声的处理效果最佳,不推荐调用这类方法处理含音乐的音频数据。