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 变速变调参数初始化"

图1 变速变调参数初始化

变调限制:
  1. SPITCH_PARM_PR_HResolution=0时,pitchrate以128为原始音调;
    • 音调最多降低为原来的1/6,即pitchrate=128*6;

    • 音调可升高原来的6倍,即pitchrate=128/6;升高音调没有严格的限制不能超过6倍,但是不建议升高过多,过多效果会比较差。

  2. 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工程也有类似的相关函数,具体参考发声玩具应用章节。