5. 变音音效(vo_pitch)
AD14N / AC104N SDK中自带变音音效,可自行调整参数做到不同的效果。
5.1. 可选音效
VP_CMD_ROBOT:平调机器音模式
VP_CMD_ROBOT2:变调机器音模式
VP_CMD_PITCHSHIFT:变调模式
VP_CMD_RAP:RAP模式,将ADC输入的声音按照midi文件的节奏进行播放
VP_CMD_PITCHSHIFT2:变声模式2
VP_CMD_RAP_REALTIME:你说我唱模式,将ADC输入的声音按照midi文件的节奏进行实时播放
VP_CMD_CARTOON:卡通模式
各音效的参数配置详见SDK;
5.2. 配置参数说明
VC_ENABLE_FLAG:变声模块使能,该变量为1时,使能变声模块;
EXTRA_DATA_SIZE:RAP模式可以包含的音源长度,单位是short;
VO_RAP_LOOPEN:RAP模式是否repeat音源
VO_RAP_COMPRESS_RATE:RAP压缩比,该值越大,RAP音源时间压缩的越多;
VP_DECAY_VAL:ECHO模式的decay速度
VP_HIS_LEN:ECHO模式的delay:复用其他模式的Buf
VP_BUFLEN:变音音效运算需要的buff
根据所选模式以及参数决定buff大小,可通过ops->need_buf()接口获取大小;
5.3. 相关结构体及函数
5.3.1. 结构体VOICE_PITCH_PARA_STRUCT
该结构体用于配置各类变音音效,该结构体中部分成员的值只对特定的变音效果有效,其中成员::
1、do_flag:选择的音效,参考VP_CMD枚举; 2、samplerate;输入音频的采样率,支持16K或24K; 3、noise_dc:能量阈值,默认为2048,一些持续存在的噪声经过变声有可能听起来会更明显,所以该阈值是用来过滤是否有有效信号输入的情况。低于阈值则mute; 4、pitchrate:音调高低,默认值128代表原始音调,小于128音调升高,大于128音调降低。建议范围[40, 256]; 5、midi_file:RAP模式的输入音源,仅RAP模式有效; 6、midifile_len:RAP模式的输入音源大小,仅RAP模式有效; 7、callback:RAP模式的状态回调; 8、priv:私有参数,一般传NULL;
5.3.2. 函数void *link_voice_pitch_sound(sound_out_obj *p_curr_sound, void *p_dac_cbuf, void **pp_effect, u32 cmd)
该函数为串联音频链路的标准接口,实现响应算法的启动,并添加到音频链路上,其中参数:
1、p_sound_out:当前算法的前级音频通道句柄; 2、p_dac_cbuf:输出的音频buff; 3、pp_effect:存放当前音效算法控制句柄指针的指针; 4、cmd:选择的变音类型,参考VP_CMD枚举; 5、返回值:启动之后最新的音频通道句柄;
5.3.3. 函数void *voice_pitch_api(void *obuf, u32 cmd, void **ppsound)
该函数用于初始化变音音效相关参数,由函数link_voice_pitch_sound()调用即可; 该函数内部会调用函数vp_cmd_case(),用于配置所选的变音音效以及其参数。
5.3.4. 函数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()。
5.3.5. 函数void rap_reopen(void)
该函数用于RAP模式播放结束后,让RAP重回RAP_PREPARE状态。
5.4. RAP和RAP_REALTIME模式文件替换说明
用户可以通过替换该音效依赖的midi文件表来进行播出不同的音调,midi文件表位于头文件midi_file0_h.h。
用户可以通过get_miditabs工具生成midi文件表,首先将需要使用的midi文件表放入工具目录,然后点击t.bat生成头文件
打开头文件可以看到生成的midi文件表
最后将生成的文件表复制到SDK的头文件midi_file0_h.h,然后在函数初始化设置配置文件表,图中以rap_realtime模式为例