6. 变音音效(vo_pitch)
本节主要介绍变音音效,其包含一下几种音效:
① 两种机器人声;
② 两种变速变调;
③ 两种rap;
④ 卡通音效;
⑤ 混响音效;
6.1. 变音音效参数配置
![]()
图1 变音音效参数配置
变音音效的参数配置如图1 变音音效参数配置,但是在选择不同的变声效果时,在某些效果下有些参数无效,如图2所示,其他音效模式具体参照SDK中的文件apps/app/bsp/common/sound_effect/vo_pitch_api.c中各个音效参数配置函数的注释说明。
![]()
图2 变调模式参数配置
![]()
图3 滤波器和其他部分参数配置
- 滤波器类型说明:
NORH是陷波;LOWSELF处理中心频率以下频段;HIGHSELF处理中心频率以上频段;FILT_BAND处理的某个频段要压制多少。
- 增益配置:
NORH的时候,没有配置,全陷。LOWSELF跟HIGHSELF的时候支持-121024到121024,代表-12dB到12dB。FILT_BAND的时候,支持-16384到0代表全压到不压。
6.2. 变音音效算法链路链接函数
SDK提供下面的函数,传递不同的CMD参数可以实现不同的音效。
6.2.1. 函数sound_out_obj *link_voice_pitch_sound(sound_out_obj *p_curr_sound, void *p_dac_cbuf, void **pp_effect, u32 cmd)
此函数实现主要实现变音算法的启动,将变音算法链接到音频链路中;① 返回值:启动之后最新的音频通道句柄;② void *p_sound_out: 当前算法前级的音频通道句柄;③ void *p_dac_cbuf: 输出到DAC的OBUF;④ void **pp_effect: 存放当前音效算法的控制句柄指针的指针;⑤ u32 cmd: 音效控制指令;![]()
图4 音效控制指令
6.2.2. 函数void *voice_pitch_api(void *obuf, u32 cmd, void **ppsound)
该函数用于初始化变音音效相关参数,由函数link_voice_pitch_sound()调用即可; 该函数内部会调用函数vp_cmd_case(),用于配置所选的变音音效以及其参数。
6.2.3. 函数void rap_callback(void *priv, int pos)
该函数为RAP模式的回调函数,由解码器调用。其中的参数pos表示RAP模式的状态; RAP模式初始化后,pos会处于RAP_PREPARE状态等待输入音源; 当输入音源大于所设置的noise_dc能量阈值后,会触发RAP模式,此时pos在会PAR_START状态; 当RAP播放结束后,pos会在RAP_END状态循环。若需要重置RAP状态,需调用函数rap_reopen()。
6.2.4. 函数void rap_reopen(void)
该函数用于RAP模式播放结束后,让RAP重回RAP_PREPARE状态。
6.3. 变音音效算法参数函数
通过配置不同的参数,可以实现不同的音效,其中关键的函数有以下:
1、音效参数选择函数:
bool vp_cmd_case(VP_CMD cmd, VOICE_PITCH_PARA_STRUCT *p_vc_parm);
2、rap音效参数配置函数:
void vp_cmd_rap(p_vc_parm);
3、实时rap音效参数配置函数;
void vp_cmd_rap_realtime(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
4、平调机器人音效参数配置函数;
void vp_cmd_robot(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
5、变调机器人音效参数配置函数;
void vp_cmd_robot2(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
6、变速变调音效参数配置函数;
void vp_cmd_pitchshift(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
7、变速变调2音效参数配置函数;
void vp_cmd_pitchshift2(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
8、卡通音效参数配置函数;
void vp_cmd_echo(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
9、混响音效参数配置函数;
void vp_cmd_echo(VOICE_PITCH_PARA_STRUCT *p_vc_parm);
6.4. 两种RAP音效的区别
RAP与实时RAP的音效是一样的,都是在输入音频数据流有能量时进行一次变音;但是他们在使用控制时有较大的区别;
1、RAP在调用启动后,会在输入的音频信号有能量时进行一次变音,再之后就会停止;下次启动变音需要调用回调函数,回调函数中调用rap_reopen可以再次启动RAP;
2、实时RAP在启动后,变音会一直工作;