8. 混合变音音效(voicechanger)
SDK中提供voicechanger变音音效,可自行调整参数做到不同的效果,发出不同的人声或者鸟叫声。
8.1. 可选音效
EFFECT_VC_AV_PITCHSHIFT:人声变音1
EFFECT_VC_F0_TD:人声变音2
EFFECT_VC_AV_F0_TD_AUTOFIT:人声变音3
EFFECT_VC_AV_PITCHSHIFT_AUTOFIT:人声变音4
EFFECT_VC_AV_BIRD:鸟叫声
EFFECT_VC_AV_BIRD1:鸟叫声1
EFFECT_VC_AV_BIRD2:鸟叫声2
EFFECT_VC_AV_BIRD3:鸟叫声3
EFFECT_VC_AV_BIRD4:鸟叫声4
EFFECT_VC_AV_BIRD5:鸟叫声5
EFFECT_VC_AV_BIRD6:鸟叫声6
其中EFFECT_VC_AV_PITCHSHIFT跟EFFECT_VC_AV_F0_TD是2种变声算法
EFFECT_VC_AV_PITCHSHIFT中formant_shift参数无效;EFFECT_VC_AV_F0_TD中可以通过组合不同的shiftv跟formant_shift调出不同的效果。
例如变女声可以设置成 formant_shift=80;shiftv=60;
EFFECT_VC_AV_F0_TD_AUTOFIT跟EFFECT_VC_AV_PITCHSHIFT_AUTOFIT是会检测声音。
例如 如果是童音即使pitch设高,也不要调高那么多。
EFFECT_VC_AV_BIRD到EFFECT_VC_AV_BIRD6是把人声转换成鸟声,例如人声唱一段旋律,
然后转换出来对应的鸟叫声旋律。其中pitch会改变鸟声的整体音高,
鸟叫建议用 EFFECT_VC_AV_BIRD5或EFFECT_VC_AV_BIRD6
8.2. 配置参数说明
const int VC_NG_THRES:能量阈值,低于这个能量的声音会被mute掉,建议默认设成0,根据实际底噪水平设置。
voicechanger变音音效的参数由两个结构体管理
结构体VOICECHANGER_AV_PARM
shiftv 调小,音调变高, 变声模式建议范围50到200, 鸟叫声模式建议范围30到100
formant 在EFFECT_VC_AV_F0_TD,EFFECT_VC_AV_F0_TD_AUTOFIT 模式下,调小音色变亮, 调小音色变沉。 范围50到200
speedv 变速参数,范围50到200. 如果是 实时变声,ad直接变声到da的,因为进出数据量需要一致。这时候speedv必须设成100,不然会有杂音。
下面参数是 EFFECT_VC_AV_BIRD5 跟 EFFECT_VC_AV_BIRD6模式下是调节颤音用的
结构体VOICESYN_AV_PARM
vibrate_rate_u 范围0-100, 非0代表开启颤音, 0代表关闭
vibrate_rate_d 范围0-100,影响颤音最大幅度,越大颤音幅度越大(BIRD6无效)
vibrate_lenCtrol 范围0-100,颤音衰减速度,影响颤音持续时长,100代表最短,0代表最长
randpercent 有效范围50-100【或者0到50,镜像对称】, 微调音色的(BIRD6无效)
8.3. 相关函数接口
8.3.1. 函数void *link_voice_changer_sound(void *p_sound_out, void p_dac_cbuf, void **pp_effect, u32 in_sr)
该函数为串联音频链路的标准接口,实现响应算法的启动,并添加到音频链路上,其中参数:
1、p_sound_out:当前算法的前级音频通道句柄; 2、p_dac_cbuf:输出的音频buff; 3、pp_effect:存放当前音效算法控制句柄指针的指针; 4、in_sr:采样率; 5、返回值:启动之后最新的音频通道句柄;
- 如果需要在解码应用中接入该音效,需要做以下几个步骤:
1、修改ld文件,防止音效算法与解码格式资源复用。 2、添加音效串联接口,可仿照decoder_api.c中,decoder_list函数串联song_speed和eq的方法做音效串联。 3、其中pp_effect参数可根据需要选择传NULL或者传自定义的effect句柄(可用于动态调整参数) 4、如果有动态调参需求,可以在对应的音效api文件中查找动态调参接口(函数名一般为update_音效名_parm),将修改后的音效参数传入调参接口即可实现动态调参。
8.3.2. 函数void *voice_changer_api(void *obuf, u32 sr, void **ppsound)
该函数用于初始化变音音效相关参数,由函数link_voice_changer_sound()调用即可;
8.3.3. 函数void update_voice_changer_parm(VOICECHANGER_AV_PARM *new_vc_parm, VOICESYN_AV_PARM *new_vsyn_ctrol)
该函数用于运行voicechanger变音音效时,动态调整参数,使用时注意采样率要和之前一致,其中参数:
1、new_vc_parm:修改配置后新的参数结构体1 2、new_vsyn_ctrol:修改配置后新的参数结构体2