.. _audio-effect-lib: 音效 ====================== 噪声门限 (Noise Gate) ------------------------- .. image:: ../../_static/kiwi-ae-drc-noisegate.png :align: center API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: void ae_drc_noisegate_init( ae_drc_noisegate_init_t *drc_ng_init_param) DRC音效之noise gate初始化 :param drc_ng_init_param: ae_drc_noisegate_init_t 类型指针 :returns: 无 .. c:struct:: ae_drc_noisegate_init_t noise gate初始化参数 .. c:member:: uint32_t holdtime 保持时间是指当输入电平低于阈值时,增益在开始向稳态值下降之前保持的时间。参数范围[0,2),单位秒,定点数q30 .. c:member:: uint32_t ltrhold 开始作用输入信号的最低等级。采样值,参数范围[0,32767] .. c:member:: uint32_t utrhold 作用输入信号的最高等级。采样值,参数范围[0,32767] .. c:member:: uint32_t release 当输入超过阈值范围时,应用增益从其最终值的90%下降到10%所需的时间。参数范围[0,2),单位秒,定点数q30 .. c:member:: uint32_t attack 当输入低于阈值范围时,应用增益从其最终值的10%上升到90%所需的时间。参数范围[0,2),单位秒,定点数q30 .. c:member:: uint32_t filter_freq 用于包络计算低通滤波器的截止频率,单位hz,范围 (0,fs/2) .. c:member:: uint32_t fs 音频采样频率,单位hz .. c:member:: uint32_t g_min 最小增益0-1,q30。当达到noise gate的阈值时的最小增益。 .. c:function:: void ae_drc_noisegate(int16_t *in,int16_t *out,int32_t datalen) DRC音效之noise gate处理 :param in: 输入数据地址 :param out: 输出数据地址 :param datalen: 输入输出数据音频点数 :returns: 无 :note: 输入输出的数据地址必不能是同一块内存空间 :note: 输入输出数据点数必须为4的整数倍 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. 调用ae_drc_noisegate_init()函数初始化noise gate 2. 调用ae_drc_noisegate()函数处理音频数据 参量均衡器 (Parametric Equalizer) ------------------------------------- .. image:: ../../_static/kiwi-ae-eq.png :align: center API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: void ae_eq_init(const int32_t coeff[AE_EQ_SERIES][5]) 音效之eq初始化 :param coeffs: 多段eq的iir系数,每段iir系数为b0,b1,b2,-a1,-a2,定点数q30 :returns: 无 :note: 默认八段iir级联 .. c:function:: void ae_eq(int32_t *in,int32_t *out,int32_t datalen) 音效eq处理 :param in: 输入音频地址 :param out: 输出音频地址 :param datalen: 输入输出数据长度 :return: 无 :note: 输入输出地址可以是同一块内存空间 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. eq工具,用于生成eq系数,使用方法如下图 .. image:: ../../_static/kiwi-ae-eq-interface.png :align: center 2. 调用ae_eq_init()函数初始化EQ 3. 调用ae_eq()函数处理音频数据 音乐机器人音效 (Roboter_mix) ------------------------------------- 是声音随着音乐的节奏播放 API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int ae_roboter_mix_need_alwaysbuf(); 音乐机器人音效运行需要的ram空间大小,in byte .. c:function:: void* ae_roboter_mix_init(void* heap); 音效之机器人变声音效初始化 :param heap: 运行空间首地址,其大小必须足够,大小可由ae_roboter_mix_need_alwaysbuf()函数获取 :return: 运行所需ram空间首地址 .. c:function:: void ae_roboter_mix_run(void* work_buf,short *m_buf,short *c_buf,int len,short *out_buf); 音效之音乐机器人变声音 :param work_buf: 运行空间首地址,ae_roboter_mix_init()函数返回 :param m_buf: 输入需要调制的音频首地址 :param c_buf: 输入添加音乐的音频首地址 :param len: 音频输入帧长 :param out_buf: 输出处理后的音频数据长度 :return: None :note: 输入输出地址可以是同一块数据空间 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. 调用ae_roboter_mix_need_alwaysbuf()获取运行需要ram空间大小,并分配所需要的ram 2. ae_roboter_mix_init()函数初始化效果 3. 调用ae_roboter_mix_run()函数处理音频数据 机器人音效 (Roboter) ------------------------------------- API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int32_t ae_roboter_init(int32_t frame_step,int32_t always_buff[768],int32_t temp_buff[1026]); 音效之机器人变声音效初始化 :param frame_step: 每帧数据的步进,它必须为每帧输入数据长度的约数,它的值影响机器人音效的效果 :param always_buff: 总长为3072byte空间,在机器人音效ae_roboter()函数不再调用之前,不可篡改、复用的空间 :param temp_buff: 总长4104byte空间,在机器人音效不调用ae_roboter()时,可篡改、复用的空间 :return 0: 成功 .. c:function:: int32_t ae_roboter(int16_t* input,int16_t* output,int32_t len); 音效之机器人变声音 :param input: 输入音频首地址 :param output: 输出音频首地址 :param 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说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int32_t kss_ae_echo_need_buf(int delay_len); 获取回声音效运行需要的ram空间大小,in byte :param delay_len: 回声延迟线长度,in samples :return: 运行所需ram空间大小 .. c:function:: int32_t kss_ae_echo_init(void* work_buf, int delay_len, int gFB, int gFF); 初始化回声 :param work_buf: echo工作sam地址,其空间必须足够,可由kss_ae_echo_need_buf()获取需要空间大小 :param delay_len: 回声延迟线长度,in samples ,影响回声出现时间 :param gFB: 回声衰减 q29 直观感受为影响同一个音重复次数 :param gFF: 回声缩放 q29 影响回声音量大小 :return 0: 工作ram空间首地址 .. c:function:: int32_t kss_ae_echo_run(void* work_buf, short* inbuf, short* outbuf, int len); 音效之机器人变声音 :param work_buf: echo工作的首地址,kss_ae_echo_init()的返回值 :param input: 输入音频首地址 :param output: 输出音频首地址 :param 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说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int32_t ae_rm_need_buf(int delay_len); 获取颤音音效运行需要的ram空间大小,in byte :param: None :return: 运行所需ram空间大小 .. c:function:: int32_t ae_rm_init(void* heap, int samplerate, int freq); 初始化颤音 :param heap: 颤音工作sam地址,其空间必须足够,可由ae_rm_need_buf()获取需要空间大小 :param samplerate: 处理音频的采样率 :param freq: 颤音的频率 :return 0: 工作ram空间首地址 .. c:function:: int32_t ae_rm_run(void*work_buf,short *indata,int inlen,short*outdata); 音效之机器人变声音 :param work_buf: echo工作的首地址,kss_ae_echo_init()的返回值 :param indata: 输入音频首地址 :param inlen: 帧长 in samples :param outdata: 输出音频首地址 :return: 处理的音频点长度 :note: 输入输出地址可以是同一块数据空间 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. 调用ae_rm_need_buf()获取颤音运行需要ram空间大小,并分配所需要的ram 2. ae_rm_init()函数初始化颤音效果 3. 调用ae_rm_run()函数处理音频数据 混响音效 (Reverb) ------------------------------------- API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:struct:: fdn_reverb_init_t 混响初始化参数结构体 .. c:member:: int32_t (* filter)[REVERB_FILTER_M] 延迟线滤波器系数。每个延迟线上都有一个滤波器 .. c:member:: int32_t* M 各延迟线长度,in samples .. c:member:: int32_t* B 延迟线系数B .. c:member:: int32_t* C 延迟线系数C .. c:member:: int32_t* G 延迟线系数G .. c:member:: int32_t (* fdn_matrix)[REVERB_DELAY_N]; 反馈系数 .. c:member:: int32_t tone_iir[2] tone equalization filter .. c:function:: int32_t fdn_reverb_init(void* heap_start,fdn_reverb_init_t* init_param); 获取颤音音效运行需要的ram空间大小,in byte :param heap_start: 工作ram首地址 :param init_param: fdn_reverb_init_t参数 :return: 运行所需ram空间大小 .. c:function:: int32_t fdn_reverb_run(int32_t* indata,int32_t* outdata,int32_t len); 音效之机器人变声音 :param work_buf: echo工作的首地址,kss_ae_echo_init()的返回值 :param indata: 输入音频首地址 :param inlen: 帧长 in samples :param outdata: 输出音频首地址 :return: 处理的音频点长度 :note: 输入输出地址可以是同一块数据空间 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. fdn_reverb_init()函数初始化颤音效果 2. 调用fdn_reverb_run()函数处理音频数据 语音检测 (VAD) ------------------------------------- API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int32_t kss_ae_vad_need_buf(); 获取VAD运行需要的ram空间大小,in byte :param: None :return: 运行所需ram空间大小 .. c:function:: int32_t kss_ae_vad_init(void* heap_addr); 初始化VAD :param heap: 颤音工作sam地址,其空间必须足够,可由kss_ae_vad_need_buf()获取需要空间大小 :return: 工作ram空间首地址 .. c:function:: int32_t kss_ae_vad_run(void* workbuf,short* inbuf); VAD运行 :param work_buf: 工作的首地址,kss_ae_vad_init()的返回值 :param 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说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int ae_pst_need_alwaysbuf(uint32_t windowsize_set) 获取拉伸音效运行需要的状态ram空间大小,in byte :param: None :return: 运行所需ram空间大小 .. c:function:: int ae_pst_need_tempsbuf(uint32_t windowsize_set) 获取拉伸音效运行需要的临时ram空间大小,in byte :param: None :return: 运行所需ram空间大小 .. c:function:: void* ae_pst_init(void* heap, Q27 stretch, int windowsize_set); 初始化拉伸音效 :param heap: 工作sam地址,其空间必须足够,可由ae_pst_need_alwaysbuf()返回 :param stretch: 拉伸比例 Q27 :param windowsize_set: 处理的窗长,可以 64 128 256 512 :return: 工作ram空间首地址 .. c:function:: int ae_pst_run(void* work_buf,short* indata, int inlen, short* outdata,void* tempbuf); 拉伸音效运行 :param work_buf: work_buf:工作sam地址,ae_pst_init()返回 :param indata: 输入音频首地址 :param inlen: 输入音频长度 :param outdata: 输出音频地址空间 :param tempbuf: 计算临时空间,大小由ae_pst_need_tempsbuf()获取 :return: 输出总长度 :note: 输入与输出地址空间不可为同一地址 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. 调用ae_pst_need_alwaysbuf(),ae_pst_need_tempsbuf()获取颤音运行需要ram空间大小,并分配所需要的ram 2. ae_pst_init()函数初始化效果 3. 调用ae_pst_run()函数处理音频数据 降噪 (Denoise) ------------------------------------- API说明 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. c:function:: int kss_ae_denoise_init(int32_t always_buff[1169],int32_t temp_buff[1538]); 降噪算法,默认处理16khz音频 :param always_buff: 总长为4676byte空间,在机器人音效kss_ae_denoise_run()函数不再调用之前,不可篡改、复用的空间。需要对齐到4 :param temp_buff: 总长6152byte空间,在机器人音效不调用kss_ae_denoise_run()时,可篡改、复用的空间。需要对齐到4 :return 0: 成功 :return 其它: 失败 :note: 只可运行再spv12x芯片上,非此类芯片,初始化失败 .. c:function:: int kss_ae_denoise_run(short *inbuf,short *outbuf,int len); 降噪算法,默认处理16khz音频 :param inbuf: 输入buf :param outbuf: 输出buf :param len: 一定为256 :return 0: 成功 :return 其它: 失败 :note: 输入数据与输出地址可以同一块内存空间 :note: 输入长度必须为256采样点 :note: 只可运行再spv12x芯片上,非此类芯片,不会做任何处理,并返回错误码 使用方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. kss_ae_denoise_init()函数初始化效果 2. 调用kss_ae_denoise_run()函数处理音频数据