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()接口获取大小;

"get_vp_buff_size.png"

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.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。

"midi_file0_headfile.png"

用户可以通过get_miditabs工具生成midi文件表,首先将需要使用的midi文件表放入工具目录,然后点击t.bat生成头文件

"get_miditabs.png"

打开头文件可以看到生成的midi文件表

"midi_tab.png"

最后将生成的文件表复制到SDK的头文件midi_file0_h.h,然后在函数初始化设置配置文件表,图中以rap_realtime模式为例

"rap_realtime_config.png"