7. 变速变调(speed)
speed算法在SDK中一般用于解码变速变调,只要在解码前置上BIT_SPEED位就可使用(可参考录音播放流程),该算法实时性较好,也可用于扩音。
7.1. 配置参数说明
该算法的参数主要由SPEED_PITCH_PARA_STRUCT结构体控制,其说明如下:
* Insample:输入音频采样率,与audio_adc采样率一致即可; * Pitchrate:变调比例,用于调节变调效果,需要与const变量搭配使用; | 当const变量SPITCH_PARM_PR_HResolution = 0时,pitchrate = 128为不变调;小于128时音调变高;大于128时音调变高; | 当const变量SPITCH_PARM_PR_HResolution = 1时,pitchrate = 32768为不变调;小于32768时音调变高;大于32768时音调变高; * Speedin / Speedout:变速比例,扩音应用下默认为1; * Quality:变调运算质量,与运算速度成正比,配置范围3~8;图1 变速变调参数初始化
- 变调限制:
- SPITCH_PARM_PR_HResolution=0时,pitchrate以128为原始音调;
音调最多降低为原来的1/6,即pitchrate=128*6;
音调可升高原来的6倍,即pitchrate=128/6;升高音调没有严格的限制不能超过6倍,但是不建议升高过多,过多效果会比较差。
- SPITCH_PARM_PR_HResolution=1时,pitchrate以32768为原始音调;
音调最多降低为原来的1/2,即pitchrate=65535;
音调升高没有严格限制;
- 变速限制:
speedin,speedout:没有严格限制比例。但是变快太多或者变慢太多效果都会比较差。
7.2. 相关函数
7.2.1. 函数void *speed_api(void *obuf, u32 insample, void **ppsound)
该函数用于初始化变速变调(speed)的相关参数,由应用层调用即可,其中参数:
1、obuf:输出的音频buff; 2、insample:当前输入音频的采样率; 3、ppsound:当前算法的前级音频通道句柄;
7.2.2. 函数int music_play_speed_set_para(music_play_obj *hdl, SPEED_PITCH_PARA_STRCUT *sp_parm)
该函数用于app_mg工程,在解码流程中动态设置变速变调参数,其中参数:
1、*hdl:音乐播放句柄; 2、*sp_parm:新的变速变调参数指针; 3、返回值:成功,返回0;失败,返回-1;voice_toy工程也有类似的相关函数,具体参考发声玩具应用章节。