音效

噪声门限 (Noise Gate)

../../_images/kiwi-ae-drc-noisegate.png

API说明

void ae_drc_noisegate_init(ae_drc_noisegate_init_t *drc_ng_init_param)

DRC音效之noise gate初始化

参数
  • drc_ng_init_param – ae_drc_noisegate_init_t 类型指针

返回

struct ae_drc_noisegate_init_t

noise gate初始化参数

uint32_t holdtime

保持时间是指当输入电平低于阈值时,增益在开始向稳态值下降之前保持的时间。参数范围[0,2),单位秒,定点数q30

uint32_t ltrhold

开始作用输入信号的最低等级。采样值,参数范围[0,32767]

uint32_t utrhold

作用输入信号的最高等级。采样值,参数范围[0,32767]

uint32_t release

当输入超过阈值范围时,应用增益从其最终值的90%下降到10%所需的时间。参数范围[0,2),单位秒,定点数q30

uint32_t attack

当输入低于阈值范围时,应用增益从其最终值的10%上升到90%所需的时间。参数范围[0,2),单位秒,定点数q30

uint32_t filter_freq

用于包络计算低通滤波器的截止频率,单位hz,范围 (0,fs/2)

uint32_t fs

音频采样频率,单位hz

uint32_t g_min

最小增益0-1,q30。当达到noise gate的阈值时的最小增益。

void ae_drc_noisegate(int16_t *in, int16_t *out, int32_t datalen)

DRC音效之noise gate处理

参数
  • in – 输入数据地址

  • out – 输出数据地址

  • datalen – 输入输出数据音频点数

返回

Note

输入输出的数据地址必不能是同一块内存空间

Note

输入输出数据点数必须为4的整数倍

使用方法

  1. 调用ae_drc_noisegate_init()函数初始化noise gate

  2. 调用ae_drc_noisegate()函数处理音频数据

参量均衡器 (Parametric Equalizer)

../../_images/kiwi-ae-eq.png

API说明

void ae_eq_init(const int32_t coeff[AE_EQ_SERIES][5])

音效之eq初始化

参数
  • coeffs – 多段eq的iir系数,每段iir系数为b0,b1,b2,-a1,-a2,定点数q30

返回

Note

默认八段iir级联

void ae_eq(int32_t *in, int32_t *out, int32_t datalen)

音效eq处理

参数
  • in – 输入音频地址

  • out – 输出音频地址

  • datalen – 输入输出数据长度

返回

Note

输入输出地址可以是同一块内存空间

使用方法

  1. eq工具,用于生成eq系数,使用方法如下图

../../_images/kiwi-ae-eq-interface.png
  1. 调用ae_eq_init()函数初始化EQ

  2. 调用ae_eq()函数处理音频数据

音乐机器人音效 (Roboter_mix)

是声音随着音乐的节奏播放

API说明

int ae_roboter_mix_need_alwaysbuf();

音乐机器人音效运行需要的ram空间大小,in byte

void *ae_roboter_mix_init(void *heap);

音效之机器人变声音效初始化

参数
  • heap – 运行空间首地址,其大小必须足够,大小可由ae_roboter_mix_need_alwaysbuf()函数获取

返回

运行所需ram空间首地址

void ae_roboter_mix_run(void *work_buf, short *m_buf, short *c_buf, int len, short *out_buf);

音效之音乐机器人变声音

参数
  • work_buf – 运行空间首地址,ae_roboter_mix_init()函数返回

  • m_buf – 输入需要调制的音频首地址

  • c_buf – 输入添加音乐的音频首地址

  • len – 音频输入帧长

  • out_buf – 输出处理后的音频数据长度

返回

None

Note

输入输出地址可以是同一块数据空间

使用方法

  1. 调用ae_roboter_mix_need_alwaysbuf()获取运行需要ram空间大小,并分配所需要的ram

  2. ae_roboter_mix_init()函数初始化效果

  3. 调用ae_roboter_mix_run()函数处理音频数据

机器人音效 (Roboter)

API说明

int32_t ae_roboter_init(int32_t frame_step, int32_t always_buff[768], int32_t temp_buff[1026]);

音效之机器人变声音效初始化

参数
  • frame_step – 每帧数据的步进,它必须为每帧输入数据长度的约数,它的值影响机器人音效的效果

  • always_buff – 总长为3072byte空间,在机器人音效ae_roboter()函数不再调用之前,不可篡改、复用的空间

  • temp_buff – 总长4104byte空间,在机器人音效不调用ae_roboter()时,可篡改、复用的空间

Return 0

成功

int32_t ae_roboter(int16_t *input, int16_t *output, int32_t len);

音效之机器人变声音

参数
  • input – 输入音频首地址

  • output – 输出音频首地址

  • len – 输入音频点数量

Return 0

成功

Return -1

失败,len 必须为初始化参数 frame_step的整数倍。

Note

输入输出地址可以是同一块数据空间

Note

!!!计算算力较高,在cpu 100Mhz,nor 50Mhz,统计每帧算力 75MCPS

使用方法

  1. 调用ae_roboter_init()函数初始化ROBOTER效果

  2. 调用ae_roboter()函数处理音频数据

回声音效 (Echo)

API说明

int32_t kss_ae_echo_need_buf(int delay_len);

获取回声音效运行需要的ram空间大小,in byte

参数
  • delay_len – 回声延迟线长度,in samples

返回

运行所需ram空间大小

int32_t kss_ae_echo_init(void *work_buf, int delay_len, int gFB, int gFF);

初始化回声

参数
  • work_buf – echo工作sam地址,其空间必须足够,可由kss_ae_echo_need_buf()获取需要空间大小

  • delay_len – 回声延迟线长度,in samples ,影响回声出现时间

  • gFB – 回声衰减 q29 直观感受为影响同一个音重复次数

  • gFF – 回声缩放 q29 影响回声音量大小

Return 0

工作ram空间首地址

int32_t kss_ae_echo_run(void *work_buf, short *inbuf, short *outbuf, int len);

音效之机器人变声音

参数
  • work_buf – echo工作的首地址,kss_ae_echo_init()的返回值

  • input – 输入音频首地址

  • output – 输出音频首地址

  • len – 输入音频点数量

Return 0

成功

Return -1

失败

Note

输入输出地址可以是同一块数据空间

使用方法

  1. 调用kss_ae_echo_need_buf()获取echo运行需要ram空间大小,并分配所需要的ram

  2. kss_ae_echo_init()函数初始化echo效果

  3. 调用kss_ae_echo_run()函数处理音频数据

颤音音效 (RM)

API说明

int32_t ae_rm_need_buf(int delay_len);

获取颤音音效运行需要的ram空间大小,in byte

Param

None

返回

运行所需ram空间大小

int32_t ae_rm_init(void *heap, int samplerate, int freq);

初始化颤音

参数
  • heap – 颤音工作sam地址,其空间必须足够,可由ae_rm_need_buf()获取需要空间大小

  • samplerate – 处理音频的采样率

  • freq – 颤音的频率

Return 0

工作ram空间首地址

int32_t ae_rm_run(void *work_buf, short *indata, int inlen, short *outdata);

音效之机器人变声音

参数
  • work_buf – echo工作的首地址,kss_ae_echo_init()的返回值

  • indata – 输入音频首地址

  • inlen – 帧长 in samples

  • outdata – 输出音频首地址

返回

处理的音频点长度

Note

输入输出地址可以是同一块数据空间

使用方法

  1. 调用ae_rm_need_buf()获取颤音运行需要ram空间大小,并分配所需要的ram

  2. ae_rm_init()函数初始化颤音效果

  3. 调用ae_rm_run()函数处理音频数据

混响音效 (Reverb)

API说明

struct fdn_reverb_init_t

混响初始化参数结构体

int32_t (*filter)[REVERB_FILTER_M]

延迟线滤波器系数。每个延迟线上都有一个滤波器

int32_t *M

各延迟线长度,in samples

int32_t *B

延迟线系数B

int32_t *C

延迟线系数C

int32_t *G

延迟线系数G

int32_t (*fdn_matrix)[REVERB_DELAY_N];

反馈系数

int32_t tone_iir[2]

tone equalization filter

int32_t fdn_reverb_init(void *heap_start, fdn_reverb_init_t *init_param);

获取颤音音效运行需要的ram空间大小,in byte

参数
  • heap_start – 工作ram首地址

  • init_param – fdn_reverb_init_t参数

返回

运行所需ram空间大小

int32_t fdn_reverb_run(int32_t *indata, int32_t *outdata, int32_t len);

音效之机器人变声音

参数
  • work_buf – echo工作的首地址,kss_ae_echo_init()的返回值

  • indata – 输入音频首地址

  • inlen – 帧长 in samples

  • outdata – 输出音频首地址

返回

处理的音频点长度

Note

输入输出地址可以是同一块数据空间

使用方法

  1. fdn_reverb_init()函数初始化颤音效果

  2. 调用fdn_reverb_run()函数处理音频数据

语音检测 (VAD)

API说明

int32_t kss_ae_vad_need_buf();

获取VAD运行需要的ram空间大小,in byte

Param

None

返回

运行所需ram空间大小

int32_t kss_ae_vad_init(void *heap_addr);

初始化VAD

参数
  • heap – 颤音工作sam地址,其空间必须足够,可由kss_ae_vad_need_buf()获取需要空间大小

返回

工作ram空间首地址

int32_t kss_ae_vad_run(void *workbuf, short *inbuf);

VAD运行

参数
  • work_buf – 工作的首地址,kss_ae_vad_init()的返回值

  • indata – 输入音频首地址

Return -1

首地址空间无效

Return 0

VAD判据无语音

Return 1

VAD判据有语音

Note

只对8khz音频 一帧128音频点判断

使用方法

  1. 调用kss_ae_vad_need_buf()获取颤音运行需要ram空间大小,并分配所需要的ram

  2. kss_ae_vad_init()函数初始化效果

  3. 调用kss_ae_vad_run()函数处理音频数据

语音拉伸 (PST)

API说明

int ae_pst_need_alwaysbuf(uint32_t windowsize_set)

获取拉伸音效运行需要的状态ram空间大小,in byte

Param

None

返回

运行所需ram空间大小

int ae_pst_need_tempsbuf(uint32_t windowsize_set)

获取拉伸音效运行需要的临时ram空间大小,in byte

Param

None

返回

运行所需ram空间大小

void *ae_pst_init(void *heap, Q27 stretch, int windowsize_set);

初始化拉伸音效

参数
  • heap – 工作sam地址,其空间必须足够,可由ae_pst_need_alwaysbuf()返回

  • stretch – 拉伸比例 Q27

  • windowsize_set – 处理的窗长,可以 64 128 256 512

返回

工作ram空间首地址

int ae_pst_run(void *work_buf, short *indata, int inlen, short *outdata, void *tempbuf);

拉伸音效运行

参数
  • work_buf – work_buf:工作sam地址,ae_pst_init()返回

  • indata – 输入音频首地址

  • inlen – 输入音频长度

  • outdata – 输出音频地址空间

  • tempbuf – 计算临时空间,大小由ae_pst_need_tempsbuf()获取

返回

输出总长度

Note

输入与输出地址空间不可为同一地址

使用方法

  1. 调用ae_pst_need_alwaysbuf(),ae_pst_need_tempsbuf()获取颤音运行需要ram空间大小,并分配所需要的ram

  2. ae_pst_init()函数初始化效果

  3. 调用ae_pst_run()函数处理音频数据

降噪 (Denoise)

API说明

int kss_ae_denoise_init(int32_t always_buff[1169], int32_t temp_buff[1538]);

降噪算法,默认处理16khz音频

参数
  • always_buff – 总长为4676byte空间,在机器人音效kss_ae_denoise_run()函数不再调用之前,不可篡改、复用的空间。需要对齐到4

  • temp_buff – 总长6152byte空间,在机器人音效不调用kss_ae_denoise_run()时,可篡改、复用的空间。需要对齐到4

Return 0

成功

Return 其它

失败

Note

只可运行再spv12x芯片上,非此类芯片,初始化失败

int kss_ae_denoise_run(short *inbuf, short *outbuf, int len);

降噪算法,默认处理16khz音频

参数
  • inbuf – 输入buf

  • outbuf – 输出buf

  • len – 一定为256

Return 0

成功

Return 其它

失败

Note

输入数据与输出地址可以同一块内存空间

Note

输入长度必须为256采样点

Note

只可运行再spv12x芯片上,非此类芯片,不会做任何处理,并返回错误码

使用方法

  1. kss_ae_denoise_init()函数初始化效果

  2. 调用kss_ae_denoise_run()函数处理音频数据