APC算法使用参考


1. 概述


1.1. 算法说明

APC(Audio Process Chain)音频处理链路,是一个包含降噪、均衡器和自动增益控制的算法组合。APC的主要目的是提高音频质量。APC的内部的算法串接流程为ANR → EQ/HPF → AGC。透过降噪消除噪声提升SNR,再根据客户所需曲线调整EQ/HPF,最后输出透过AGC放大或压抑。


1.2. 关键词说明

  • AGC

    AGC(Automatic Gain Control),自动增益控制,用于控制数字输出增益。

  • EQ

    EQ(Equalizer),均衡器处理,用于对特定频段进行增益或衰减。

  • ANR

    ANR(Acoustic Noise Reduction),降噪,用于去除环境中持续存在,频率固定的噪声。

  • HPF

    HPF(High-Pass Filtering),高通滤波。


1.3. 注意

为方便调试和确认算法效果,需要用户应用自行实现替换算法参数和抓取音频数据的逻辑。


2. API 参考


2.1. 功能模块API

API名 功能
IaaApc_GetBufferSize 获取Apc算法运行所需要的内存大小
IaaApc_Init 初始化Apc算法
IaaApc_Config 配置Apc算法
IaaApc_SetLowFreqCompressionRatioCurve 配置Apc中Agc算法分频段压缩率曲线(低频)
IaaApc_SetMidFreqCompressionRatioCurve 配置Apc中Agc算法分频段压缩率曲线(中频)
IaaApc_SetHighFreqCompressionRatioCurve 配置Apc中Agc算法分频段压缩率曲线(高频)
IaaApc_SetAgcFreqBand 配置Apc中Agc算法分频段之频率
IaaApc_GetNrResult 获取Apc算法Anr的输出数据
IaaApc_GetNrEqResult 获取Apc算法Anr和Eq的输出数据
IaaApc_GetVadOut 获取Apc算法中Anr计算的语音机率
IaaApc_Run Apc算法处理
IaaApc_Free 释放Apc算法资源
IaaApc_Reset 重新初始化Apc算法
IaaApc_GetConfig 获取Apc算法当前的配置参数
IaaApc_ApplyDigitalGain 对输入数据做增益或衰减
IaaAnr_GetBufferSize 获取Anr算法运行所需要的内存大小
IaaAnr_Init 初始化Anr算法
IaaAnr_Config 配置Anr算法
IaaAnr_Run Anr算法处理
IaaAnr_Free 释放Anr算法资源
IaaAnr_Reset 重新初始化Anr算法
IaaAnr_GetConfig 获取Anr算法当前的配置参数
IaaEq_GetBufferSize 获取Eq算法运行所需要的内存大小
IaaEq_Init 初始化Eq算法
IaaEq_Config 配置Eq算法
IaaEq_Run Eq算法处理
IaaEq_Free 释放Eq算法资源
IaaEq_Reset 重新初始化Eq算法
IaaEq_GetConfig 获取Eq算法当前的配置参数
IaaAgc_GetBufferSize 获取Agc算法运行所需要的内存大小
IaaAgc_Init 初始化Agc算法
IaaAgc_Config 配置Agc算法
IaaAgc_SetLowFreqCompressionRatioCurve 配置Agc算法分频段压缩率曲线(低频)
IaaAgc_SetMidFreqCompressionRatioCurve 配置Agc算法分频段压缩率曲线(中频)
IaaAgc_SetHighFreqCompressionRatioCurve 配置Agc算法分频段压缩率曲线(高频)
IaaAgc_SetAgcFreqBand 配置Agc算法分频段之频率
IaaAgc_Run Agc算法处理
IaaAgc_Free 释放Agc算法资源
IaaAgc_Reset 重新初始化Agc算法
IaaAgc_GetConfig 获取当前Agc算法的配置参数
IaaApc_SetCompressionRatioCurve 配置Apc中Agc算法压缩率曲线,可自行设定分段长度
IaaAgc_SetCompressionRatioCurve 配置Agc算法压缩率曲线,可自行设定分段长度
IaaApc_NrEstimateReferAec 参考AEC线性处理结果做降噪处理,避免非线性Aec造成Anr收敛异常
IaaApc_EnhanceNNBFMode 针对串接Bf与Apc深度学习降噪算法之特化增强
IaaApc_FilterDesign 初始化滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型
IaaApc_FilterApply 套用IIR滤波
IaaEq_FilterDesign 初始化滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型
IaaEq_FilterApply 套用IIR滤波
IaaAnr_EnhanceNNBFMode 针对串接Bf与Anr深度学习降噪算法之特化增强
IaaApc_GetAPIVersion 取得Apc算法库API版本
IaaApc_SetHandleId 配置Apc算法id
IaaAnr_SetHandleId 配置Anr算法id
IaaEq_SetHandleId 配置Eq算法id
IaaAgc_SetHandleId 配置Agc算法id
IaaApc_GetJsonFileSize Apc获取解析Json文件内容所需要的内存大小
IaaApc_NrReadJson 配置Json参数到Apc算法
IaaAnr_GetJsonFileSize Anr获取解析Json文件内容所需要的内存大小
IaaAnr_NrReadJson 配置Json参数到Anr算法
IaaApc_EnableComfortNoise 配置Apc舒适噪音算法并设定舒适噪音能量
IaaAnr_EnableComfortNoise 配置Anr舒适噪音算法并设定舒适噪音能量
IaaEq_EnableComfortNoise 配置Eq舒适噪音算法并设定舒适噪音能量
IaaAgc_EnableComfortNoise 配置Agc舒适噪音算法并设定舒适噪音能量
IaaApc_EnableAutoSmooth 配置Apc中Anr丝滑噪音算法
IaaAnr_EnableAutoSmooth 配置Anr丝滑噪音算法
IaaApc_ApplyComfortNoise 套用指定能量之舒适噪音

2.2. IaaApc_GetBufferSize

  • 功能

    获取Apc算法运行所需要的内存大小。

  • 语法

    unsigned int IaaApc_GetBufferSize(AudioApcBufferConfig *apc_switch);
    
  • 形参

    参数名称 描述 输入/输出
    apc_switch 配置Apc算法使能设置的结构体指针 输入
  • 返回值

    返回值为Apc算法运行所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。

  • 举例

    请参考IaaApc_Run举例部分。


2.3. IaaApc_Init

  • 功能

    初始化Apc算法。

  • 语法

    APC_HANDLE IaaApc_Init(char* const working_buffer_address,AudioProcessInit *audio_process_init, AudioApcBufferConfig *apc_switch);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Apc算法所使用的内存地址 输入
    audio_process_init Apc算法的初始化结构体指针 输入
    apc_switch Apc算法使能结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • Apc算法中ANR/AGC/EQ算法支持8K/16K/48K采样率,HPF仅支援8K/16K采样率。
  • 举例

    请参考IaaApc_Run举例部分。


2.4. IaaApc_Config

  • 功能

    配置Apc算法。

  • 语法

    ALGO_APC_RET IaaApc_Config(APC_HANDLE handle,
                        AudioAnrConfig *anr_config,
                        AudioEqConfig *eq_config,
                        AudioHpfConfig *hpf_config,
                        AudioVadConfig *vad_config,
                        AudioDereverbConfig *dereverb_config,
                        AudioAgcConfig *agc_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    anr_config 配置Anr算法的结构体指针 输入
    eq_config 配置Eq算法的结构体指针 输入
    hpf_config 配置Hpf算法的结构体指针 输入
    vad_config 配置Vad算法的结构体指针(已废弃) 输入
    dereverb_config 配置Dereverb算法的结构体指针(已废弃) 输入
    agc_config 配置Agc算法的结构体指针 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaApc_Run举例部分。


2.5. IaaApc_SetLowFreqCompressionRatioCurve

  • 功能

    配置Apc中Agc算法分频段压缩率曲线(低频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_APC_RET IaaApc_SetLowFreqCompressionRatioCurve(APC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaApc_Run举例部分。


2.6. IaaApc_SetMidFreqCompressionRatioCurve

  • 功能

    配置Apc中Agc算法分频段压缩率曲线(中频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_APC_RET IaaApc_SetMidFreqCompressionRatioCurve(APC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaApc_Run举例部分。


2.7. IaaApc_SetHighFreqCompressionRatioCurve

  • 功能

    配置Apc中Agc算法分频段压缩率曲线(高频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_APC_RET IaaApc_SetHighFreqCompressionRatioCurve(APC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaApc_Run举例部分。


2.8. IaaApc_SetAgcFreqBand

  • 功能

    配置Apc中Agc算法分频段之频率,请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_APC_RET IaaApc_ SetAgcFreqBand(APC_HANDLE handle,
                            int* frequency_band);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    frequency_band 频段数组,包含低频段上限频率,中频段上限频率,高段频段上限频率。
    举例: frequency_band若设定为{3000,4000,8000}
    则低频频段为03000Hz,中频为30004000Hz,高频为4000~8000Hz,须注意最高频率不能超过采样率的一半。
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaApc_Run举例部分。


2.9. IaaApc_GetNrResult

  • 功能

    获取Apc算法中Anr的处理结果。

  • 语法

    ALGO_APC_RET IaaApc_GetNrResult(APC_HANDLE handle, short*nr_audio_out);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    nr_audio_out Anr处理输出数据指针 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 必须使能Apc算法中的Anr,才能调用此接口获取数据。
  • 举例

    请参考IaaApc_Run举例部分。


2.10. IaaApc_GetNrEqResult

  • 功能

    获取Apc算法中Anr和Eq的处理结果

  • 语法

    ALGO_APC_RET IaaApc_GetNrEqResult(APC_HANDLE handle,short*nr_eq_audio_out);
    
  • 形参

    参数名称 描述 输入/输出
    handle Aec算法handle 输入
    nr_eq_audio_out Anr和Eq处理输出数据指针 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 必须使能Apc算法中的Anr和Eq,才能调用此接口获取数据。
  • 举例

    请参考IaaApc_Run举例部分。


2.11. IaaApc_GetVadOut

  • 功能

    获取Apc算法中Anr计算的语音机率

  • 语法

    ALGO_APC_RET IaaApc_GetVadOut(APC_HANDLE handle, int* speech_probability);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    speech_probability Anr处理输出语音机率数据指针,范围:[0,100] 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 必须使能Apc算法中的Anr和Eq,才能调用此接口获取数据。
  • 举例

    请参考IaaApc_Run举例部分。


2.12. IaaApc_Run

  • 功能

    Apc算法处理

  • 语法

    ALGO_APC_RET IaaApc_Run(APC_HANDLE handle,short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    pss_audio_in 输入数据指针 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 数据量必须和调用IaaApc_Init时设定的point_number(一次IaaApc_Run所需要的采样点数)相对应,处理后的数据会回写到pss_audio_in所指向的内存中。
  • 举例

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <string.h>
    #include "AudioProcess.h"
    
    int main(int argc, char *argv[])
    {
        short input[1024];
        char input_file[512];
        char output_file[512];
        int counter = 0;
        int speech_prob = 0;
        int intensity_band[6] = { 3, 24, 40, 64, 80, 128 };
        int intensity[7] = { 30, 30, 30, 30, 30, 30, 30 };
        short eq_table[129] = { 1, 1, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5 };
        short compression_ratio_input[_AGC_CR_NUM] = { -65, -55, -48, -25, -18, -12, 0 };
        short compression_ratio_output[_AGC_CR_NUM] = { -65, -50, -40, -20, -10, -5, -3 };
    
        AudioApcBufferConfig apc_switch;
        apc_switch.anr_enable = 1;
        apc_switch.eq_enable = 0;
        apc_switch.dr_enable = 0;
        apc_switch.vad_enable = 0;
        apc_switch.agc_enable = 1;
    
        int buffersize = IaaApc_GetBufferSize(&apc_switch);
        char *working_buf_ptr = (char*)malloc(buffersize);
    
        FILE * fin, *fout;
        ALGO_APC_RET ret1;
        AudioProcessInit apc_init;
        AudioAnrConfig anr_config;
        AudioEqConfig eq_config;
        AudioHpfConfig hpf_config;
        AudioAgcConfig agc_config;
        APC_HANDLE handle;
        apc_init.point_number = 128;
        apc_init.channel = 1;
        apc_init.sample_rate = IAA_APC_SAMPLE_RATE_16000;
    
        handle = IaaApc_Init((char *)working_buf_ptr, &apc_init, &apc_switch);
        if (handle == NULL)
        {
            printf("APC init error\r\n");
            return -1;
        }
        else
        {
            printf("APC init succeed\r\n");
        }
        /******ANR Config*******/
        anr_config.anr_enable = apc_switch.anr_enable;
        anr_config.user_mode = 2;
        anr_config.anr_filter_mode = 4;
        memcpy(anr_config.anr_intensity_band, intensity_band, 6 * sizeof(int));
        memcpy(anr_config.anr_intensity, intensity, 7 * sizeof(int));
        anr_config.anr_smooth_level = 10;
        anr_config.anr_converge_speed = 2;
        /******EQ Config********/
        eq_config.eq_enable = 0;
        eq_config.user_mode = 1;
        memcpy(eq_config.eq_gain_db, eq_table, _EQ_BAND_NUM*sizeof(short));
        /******HPF Config********/
        hpf_config.hpf_enable = apc_switch.eq_enable;
        hpf_config.user_mode = 1;
        hpf_config.cutoff_frequency = AUDIO_HPF_FREQ_500;
        /******AGC Config********/
        agc_config.agc_enable = apc_switch.agc_enable;
        agc_config.user_mode = 2;
        agc_config.gain_info.gain_max = 60;
        agc_config.gain_info.gain_min = -5;
        agc_config.gain_info.gain_init = 0;
        agc_config.gain_step = 3;
        agc_config.drop_gain_max = 50;
        agc_config.attack_time = 1;
        agc_config.release_time = 1;
        agc_config.noise_gate_db = -50;
        memcpy(agc_config.compression_ratio_input, compression_ratio_input, _AGC_CR_NUM*sizeof(short));
        memcpy(agc_config.compression_ratio_output, compression_ratio_output, _AGC_CR_NUM*sizeof(short));
        agc_config.noise_gate_attenuation_db = 0;
        agc_config.drop_gain_threshold = -5;
    
        int freqBand[_AGC_FREQ_BAND_NUM] = { 3000, 6000, 8000 };
        int compressionRatioArrayLowInput[_AGC_CR_NUM] = { -80, -60, -40, -20, 0, 0, 0 };
        int compressionRatioArrayLowOutput[_AGC_CR_NUM] = { -5, -5, -5, -5, -5, -5, -5 };
        int compressionRatioArrayMidInput[_AGC_CR_NUM] = { -80, -60, -40, -20, 0, 0, 0 };
        int compressionRatioArrayMidOutput[_AGC_CR_NUM] = { -80, -60, -40, -20, 0, 0, 0 };
        int compressionRatioArrayHighInput[_AGC_CR_NUM] = { -80, -60, -40, -20, 0, 0, 0 };
        int compressionRatioArrayHighOutput[_AGC_CR_NUM] = { -80, -60, -40, -20, 0, 0, 0 };
    
        AudioProcessInit apc_init_cpy;
        AudioAnrConfig anr_config_cpy;
        AudioEqConfig eq_config_cpy;
        AudioHpfConfig hpf_config_cpy;
        AudioAgcConfig agc_config_cpy;
    
        if (IaaApc_Config(handle, &anr_config, &eq_config, &hpf_config, NULL, NULL, &agc_config) == -1)
        {
            return -1;
        }
    
        IaaApc_SetAgcFreqBand(handle, freqBand);
        IaaApc_SetLowFreqCompressionRatioCurve(handle, compressionRatioArrayLowInput, compressionRatioArrayLowOutput);
        IaaApc_SetMidFreqCompressionRatioCurve(handle, compressionRatioArrayMidInput, compressionRatioArrayMidOutput);
        IaaApc_SetHighFreqCompressionRatioCurve(handle, compressionRatioArrayHighInput, compressionRatioArrayHighOutput);
    
        IaaApc_GetConfig(handle, &apc_init_cpy, &anr_config_cpy, &eq_config_cpy, &hpf_config_cpy, NULL, NULL, &agc_config_cpy);
    
        sprintf(input_file, "%s", "./../code/sample/data/IEEE_Female_mono_16_kHz.wav");
        sprintf(output_file, "%s", "./../code/sample/data/APC_out_16K.wav");
    
        fin = fopen(input_file, "rb");
        if (!fin)
        {
            printf("the input file %s could not be open\n", input_file);
            return -1;
        }
    
        fout = fopen(output_file, "wb");
        if (!fout)
        {
            printf("the output file could not be open\n");
            return -1;
        }
    
        fread(input, sizeof(char), 44, fin); // read header 44 bytes
        fwrite(input, sizeof(char), 44, fout); // write 44 bytes output
    
        while (fread(input, sizeof(short), apc_init.point_number*apc_init.channel, fin))
        {
            counter++;
            // do one frame audio process ---------------
            ret1 = IaaApc_Run(handle, input);
            IaaApc_GetVadOut(handle, &speech_prob);
            if (counter % 1000 == 999)
            {
                printf("counter = %d\n", counter);
                printf("current time = %f\n", (float)counter*apc_init.point_number / apc_init.sample_rate);
            }
    
            if (ret1 != ALGO_APC_RET_SUCCESS)
            {
                printf("Error occured in AudioProcess\n");
                break;
            }
    
            fwrite(input, sizeof(short), apc_init.point_number*apc_init.channel, fout);
        }
        IaaApc_Free(handle);
        fclose(fin);
        fclose(fout);
    
        printf("Done\n");
        return 0;
    }
    

2.13. IaaApc_Free

  • 功能

    释放Apc算法资源

  • 语法

    ALGO_APC_RET IaaApc_Free(APC_HANDLE handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
  • 返回值

    无。

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaApc_Run举例部分。


2.14. IaaApc_Reset

  • 功能

    重新初始化Apc算法

  • 语法

    APC_HANDLE IaaApc_Reset(char* working_buffer_address,AudioProcessInit *audio_process_init, AudioApcBufferConfig *apc_switch);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Apc算法运行所使用的内存地址 输入
    audio_process_init Apc算法的初始化结构体指针 输入
    apc_switch 配置Apc算法使能设置的结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    当重新初始化Apc算法且使用的功能选项与之前不同时,需要释放掉原来算法运行所使用的内存,重新调用IaaApc_GetBufferSize获取当前功能选项所需要的内存大小,重新申请相应大小的内存供Apc算法使用。

  • 举例

    无。


2.15. IaaApc_GetConfig

  • 功能

    获取Apc算法的当前配置参数

  • 语法

    ALGO_APC_RET IaaApc_GetConfig(APC_HANDLE handle,
                        AudioProcessInit *audio_process_init,
                        AudioAnrConfig *anr_config,
                        AudioEqConfig *eq_config,
                        AudioHpfConfig *hpf_config,
                        AudioVadConfig *vad_config,
                        AudioDereverbConfig *dereverb_config,
                        AudioAgcConfig *agc_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    audio_process_init Apc算法的初始化结构体指针 输出
    anr_config Apc算法中当前Anr的配置参数 输出
    eq_config Apc算法中当前Eq的配置参数 输出
    hpf_config Apc算法中当前Hpf的配置参数 输出
    vad_config Apc算法中当前Vad的配置参数(已废弃) 输出
    dereverb_config Apc算法中当前Dereverb的配置参数(已废弃) 输出
    agc_config Apc算法中当前Agc的配置参数 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaApc_Run举例部分。


2.16. IaaApc_ApplyDigitalGain

  • 功能

    对输入数据做增益或衰减

  • 语法

    ALGO_APC_RET IaaApc_ApplyDigitalGain(APC_HANDLE handle,
    short* pss_audio_in, float gain_value);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    pss_audio_in 输入数据指针 输入/输出
    gain_value 增益/衰减值
    范围: [-120,120]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.17. IaaAnr_GetBufferSize

  • 功能

    获取Anr算法运行所需要的内存大小。

  • 语法

    unsigned int IaaAnr_GetBufferSize(void);
    
  • 形参

    参数名称 描述 输入/输出
  • 返回值

    返回值为Anr算法运行所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。

  • 举例

    请参考IaaAnr_Run举例部分。


2.18. IaaAnr_Init

  • 功能

    初始化Anr算法。

  • 语法

    ANR_HANDLE IaaAnr_Init(char* working_buffer_address, AudioProcessInit *anr_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Anr算法所使用的内存地址 输入
    anr_init Anr算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • ANR算法支持8K/16K/48K采样率。
  • 举例

    请参考IaaAnr_Run举例部分。


2.19. IaaAnr_Config

  • 功能

    配置Anr算法。

  • 语法

    ALGO_ANR_RET IaaAnr_Config(ANR_HANDLE handle, AudioAnrConfig *anr_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    anr_config Anr算法的配置结构体指针 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAnr_Run举例部分。


2.20. IaaAnr_Run

  • 功能

    Anr算法处理

  • 语法

    ALGO_ANR_RET IaaAnr_Run(ANR_HANDLE handle, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    pss_audio_in 输入数据指针 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 数据量必须和调用IaaAnr_Init时设定的point_number(一次IaaAnr_Run所需要的采样点数)相对应,处理后的数据会回写到pss_audio_in所指向的内存中。
  • 举例

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/time.h>
    
    #include "AudioProcess.h"
    
    /*  0:Fixed input file  1:User input file   */
    #define IN_PARAMETER 1
    
    int main(int argc, char *argv[])
    {
        short in_output[1024];
        unsigned int workingBufferSize;
        char *workingBuffer = NULL;
        ANR_HANDLE handle;
        AudioProcessInit anr_init, anr_get_init;
        AudioAnrConfig anr_config, anr_get_config;
        ALGO_APC_RET ret;
        int tempSize;
        FILE* fpIn;  //input file
        FILE* fpOut; //output file
        char src_file[128] = {0};
        char dst_file[128] = {0};
        /*********************User change section start*******************/
        int intensity_band[6] = {3,24,40,64,80,128};
        int intensity[7] = {30,30,30,30,30,30,30};
        anr_init.point_number = 128;
        anr_init.channel = 1;
        anr_init.sample_rate = IAA_APC_SAMPLE_RATE_16000;
    
        anr_config.anr_enable = 1;
        anr_config.user_mode = 2;
        anr_config.anr_filter_mode = 4;
        anr_config.anr_smooth_level = 10;
        anr_config.anr_converge_speed = 2;
        /*********************User change section end*******************/
        memcpy(anr_config.anr_intensity_band, intensity_band, sizeof(intensity_band));
        memcpy(anr_config.anr_intensity, intensity, sizeof(intensity));
        //(1)IaaAnr_GetBufferSize
        workingBufferSize = IaaAnr_GetBufferSize();
        workingBuffer = (char *)malloc(workingBufferSize);
        if(NULL == workingBuffer)
        {
            printf("malloc workingBuffer failed !\n");
            return -1;
        }
        printf("malloc workingBuffer succeed !\n");
        //(2)IaaAnr_Init
        handle = IaaAnr_Init(workingBuffer, &anr_init);
        if(NULL == handle)
        {
            printf("IaaAnr_Init failed !\n");
            return -1;
        }
        printf("IaaAnr_Init succeed !\n");
        //(3)IaaAnr_Config
        ret = IaaAnr_Config(handle, &anr_config);
        if(ret)
        {
            printf("IaaAnr_Config failed !\n");
            return -1;
        }
        printf("IaaAnr_Config succeed !\n");
        //(4)IaaAnr_GetConfig
        ret = IaaAnr_GetConfig(handle, &anr_get_init, &anr_get_config);
        if(ret)
        {
            printf("IaaAnr_GetConfig failed !\n");
            return -1;
        }
        printf("IaaAnr_GetConfig succeed !\n");
        printf("anr_get_config.user_mode = %d, ...\n", anr_get_config.user_mode);
    
    #if IN_PARAMETER
        if(argc < 3)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", src_file);
        sscanf(argv[2], "%s", dst_file);
    #else
        sprintf(src_file, "%s", "./APC_AFE_16K.wav");
        if(argc < 2)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", dst_file);
    #endif
    
        fpIn = fopen(src_file, "rb");
        if(NULL == fpIn)
        {
            printf("fopen in_file failed !\n");
            return -1;
        }
        printf("fopen in_file success !\n");
        fpOut = fopen(dst_file, "wb");
        if(NULL == fpOut)
        {
            printf("fopen out_file failed !\n");
            return -1;
        }
        printf("fopen out_file success !\n");
    #if 1
        fread(in_output, sizeof(char), 44, fpIn);
        fwrite(in_output, sizeof(char), 44, fpOut);
    #endif
        tempSize = anr_init.point_number * anr_init.channel;
        while(tempSize == fread(in_output, sizeof(short), tempSize, fpIn))
        {
            //(5)IaaAnr_Run
            ret = IaaAnr_Run(handle, in_output);
            if(ret)
            {
                printf("IaaAnr_Run failed !\n");
                return -1;
            }
            fwrite(in_output, sizeof(short), tempSize, fpOut);
        }
        printf("Break:needBytes =%d \t nBytesRead = %d\n", anr_init.point_number * anr_init.channel, tempSize);
        //(6)IaaAnr_Free
        IaaAnr_Free(handle);
        free(workingBuffer);
        fclose(fpIn);
        fclose(fpOut);
        printf("APC_ANR end !\n");
    
        return 0;
    }
    

2.21. IaaAnr_Free

  • 功能

    释放Anr算法资源

  • 语法

    ALGO_APC_RET IaaAnr_Free(ANR_HANDLE handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
  • 返回值

    无。

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAnr_Run举例部分。


2.22. IaaAnr_Reset

  • 功能

    重新初始化Anr算法

  • 语法

    ANR_HANDLE IaaAnr_Reset(char* working_buffer_address, AudioProcessInit *anr_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Anr算法运行所使用的内存地址 输入
    anr_init Anr算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    无。


2.23. IaaAnr_GetConfig

  • 功能

    获取Anr算法的当前配置参数

  • 语法

    ALGO_ANR_RET IaaAnr_GetConfig(ANR_HANDLE handle, AudioProcessInit *anr_init, AudioAnrConfig *anr_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    anr_init Anr算法的初始化结构体指针 输出
    anr_config Anr算法中当前的配置参数 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAnr_Run举例部分。


2.24. IaaEq_GetBufferSize

  • 功能

    获取Eq算法运行所需要的内存大小。

  • 语法

    unsigned int IaaEq_GetBufferSize(void);
    
  • 形参

    参数名称 描述 输入/输出
  • 返回值

    返回值为Eq算法运行所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。

  • 举例

    请参考IaaEq_Run举例部分。


2.25. IaaEq_Init

  • 功能

    初始化Eq算法。

  • 语法

    EQ_HANDLE IaaEq_Init(char* working_buffer_address, AudioProcessInit *eq_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Eq算法所使用的内存地址 输入
    eq_init Eq算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • Eq算法支持8K/16K/48K采样率,Hpf仅支援8K/16K采样率。
  • 举例

    请参考IaaEq_Run举例部分。


2.26. IaaEq_Config

  • 功能

    配置Eq算法。

  • 语法

    ALGO_EQ_RET IaaEq_Config(EQ_HANDLE handle, AudioHpfConfig *hpf_config, AudioEqConfig *eq_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    hpf_config Hpf算法的配置结构体指针 输入
    eq_config Eq算法的配置结构体指针 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaEq_Run举例部分。


2.27. IaaEq_Run

  • 功能

    Eq算法处理

  • 语法

    ALGO_EQ_RET IaaEq_Run(EQ_HANDLE handle, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    pss_audio_in 输入数据指针 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 数据量必须和调用IaaEq_Init 时设定的point_number(一次IaaEq_Run所需要的采样点数)相对应,处理后的数据会回写到pss_audio_in所指向的内存中。
  • 举例

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/time.h>
    
    #include "AudioProcess.h"
    
    /*  0:Fixed input file  1:User input file   */
    #define IN_PARAMETER 1
    
    int main(int argc, char *argv[])
    {
        short in_output[1024];
        unsigned int workingBufferSize;
        char *workingBuffer = NULL;
        EQ_HANDLE handle;
        AudioProcessInit eq_init, eq_get_init;
        AudioHpfConfig hpf_config, hpf_get_config;
        AudioEqConfig  eq_config, eq_get_config;
        ALGO_APC_RET ret;
        int tempSize;
    
        FILE* fpIn;  //input file
        FILE* fpOut; //output file
        char src_file[128] = {0};
        char dst_file[128] = {0};
        /*********************User change section start*******************/
        short eq_table[129];
        memset(eq_table, 0, sizeof(eq_table));
        eq_init.point_number = 128;
        eq_init.channel = 1;
        eq_init.sample_rate = IAA_APC_SAMPLE_RATE_16000;
    
        hpf_config.hpf_enable = 1;
        hpf_config.user_mode = 1;
        hpf_config.cutoff_frequency = AUDIO_HPF_FREQ_150;
    
        eq_config.eq_enable = 1;
        eq_config.user_mode = 1;
        /*********************User change section end*******************/
        memcpy(eq_config.eq_gain_db, eq_table, sizeof(eq_table));
        //(1)IaaEq_GetBufferSize
        workingBufferSize = IaaEq_GetBufferSize();
        workingBuffer = (char *)malloc(workingBufferSize);
        if(NULL == workingBuffer)
        {
            printf("malloc workingBuffer failed !\n");
            return -1;
        }
        printf("malloc workingBuffer succeed !\n");
        //(2)IaaEq_Init
        handle = IaaEq_Init(workingBuffer, &eq_init);
        if(NULL == handle)
        {
            printf("IaaEq_Init failed !\n");
            return -1;
        }
        printf("IaaEq_Init succeed !\n");
        //(3)IaaEq_Config
        ret = IaaEq_Config(handle, &hpf_config, &eq_config);
        if(ret)
        {
            printf("IaaEq_Config failed !\n");
            return -1;
        }
        printf("IaaEq_Config succeed !\n");
        //(4)IaaEq_GetConfig
        ret = IaaEq_GetConfig(handle, &eq_get_init, &hpf_get_config, &eq_get_config);
        if(ret)
        {
            printf("IaaEq_GetConfig failed !\n");
            return -1;
        }
        printf("IaaEq_GetConfig succeed !\n");
        printf("eq_get_config.user_mode = %d, ...\n", eq_get_config.user_mode);
    
    #if IN_PARAMETER
        if(argc < 3)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", src_file);
        sscanf(argv[2], "%s", dst_file);
    #else
        sprintf(src_file, "%s", "./APC_AFE_16K.wav");
        if(argc < 2)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", dst_file);
    #endif
    
        fpIn = fopen(src_file, "rb");
        if(NULL == fpIn)
        {
            printf("fopen in_file failed !\n");
            return -1;
        }
        printf("fopen in_file success !\n");
        fpOut = fopen(dst_file, "wb");
        if(NULL == fpOut)
        {
            printf("fopen out_file failed !\n");
            return -1;
        }
        printf("fopen out_file success !\n");
    #if 1
        fread(in_output, sizeof(char), 44, fpIn);
        fwrite(in_output, sizeof(char), 44, fpOut);
    #endif
        tempSize = eq_init.point_number * eq_init.channel;
        while(tempSize == fread(in_output, sizeof(short), tempSize, fpIn))
        {
            //(5)IaaEq_Run
            ret = IaaEq_Run(handle, in_output);
            if(ret)
            {
                printf("IaaEq_Run failed !\n");
                return -1;
            }
            fwrite(in_output, sizeof(short), tempSize, fpOut);
        }
        printf("Break:needBytes =%d \t nBytesRead = %d\n", eq_init.point_number * eq_init.channel, tempSize);
        //(6)IaaEq_Free
        IaaEq_Free(handle);
        free(workingBuffer);
        fclose(fpIn);
        fclose(fpOut);
        printf("APC_EQ end !\n");
    
        return 0;
    }
    

2.28. IaaEq_Free

  • 功能

    释放Eq算法资源

  • 语法

    ALGO_EQ_RET IaaEq_Free(EQ_HANDLE handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
  • 返回值

    无。

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaEq_Run举例部分。


2.29. IaaEq_Reset

  • 功能

    重新初始化Eq算法

  • 语法

    EQ_HANDLE IaaEq_Reset(char* working_buffer_address, AudioProcessInit *eq_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Eq算法运行所使用的内存地址 输入
    eq_init Eq算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    无。


2.30. IaaEq_GetConfig

  • 功能

    获取Eq算法的当前配置参数

  • 语法

    ALGO_EQ_RET IaaEq_GetConfig(EQ_HANDLE handle, AudioProcessInit *eq_init, AudioHpfConfig *hpf_config, AudioEqConfig *eq_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    eq_init Eq算法的初始化结构体指针 输出
    hpf_config Hpf算法中当前的配置参数 输出
    eq_config Eq算法中当前的配置参数 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaEq_Run举例部分。


2.31. IaaAgc_GetBufferSize

  • 功能

    获取Agc算法运行所需要的内存大小。

  • 语法

    unsigned int IaaAgc_GetBufferSize(void);
    
  • 形参

    参数名称 描述 输入/输出
  • 返回值

    返回值为Agc算法运行所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。

  • 举例

    请参考IaaAgc_Run举例部分。


2.32. IaaAgc_Init

  • 功能

    初始化Agc算法。

  • 语法

    AGC_HANDLE IaaAgc_Init(char* working_buffer_address, AudioProcessInit *agc_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Agc算法所使用的内存地址 输入
    agc_init Agc算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • Agc算法支持8K/16K/48K采样率。
  • 举例

    请参考IaaAgc_Run举例部分。


2.33. IaaAgc_Config

  • 功能

    配置Agc算法。

  • 语法

    ALGO_AGC_RET IaaAgc_Config(AGC_HANDLE handle, AudioAgcConfig *agc_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    agc_config Agc算法的配置结构体指针 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAgc_Run举例部分。


2.34. IaaAgc_SetLowFreqCompressionRatioCurve

  • 功能

    配置Agc算法分频段压缩率曲线(低频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_AGC_RET IaaAgc_SetLowFreqCompressionRatioCurve(AGC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaAgc_Run举例部分。


2.35. IaaAgc_SetMidFreqCompressionRatioCurve

  • 功能

    配置Agc算法分频段压缩率曲线(中频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_AGC_RET IaaAgc_SetMidFreqCompressionRatioCurve(AGC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaAgc_Run举例部分。


2.36. IaaAgc_SetHighFreqCompressionRatioCurve

  • 功能

    配置Agc算法分频段压缩率曲线(高频),请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_AGC_RET IaaAgc_SetHighFreqCompressionRatioCurve(AGC_HANDLE handle,
                        int* CompressRatioInput, int* CompressRatioOutput);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    CompressRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaAgc_Run举例部分。


2.37. IaaAgc_SetAgcFreqBand

  • 功能

    配置Agc算法分频段之频率,请先设定Agc的user_mode为2再使用此函式,否则会回传错误。

  • 语法

    ALGO_AGC_RET IaaAgc_SetAgcFreqBand(AGC_HANDLE handle, int* frequency_band);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    frequency_band 频段数组,包含低频段上限频率,中频段上限频率,高段频段上限频率。
    举例: frequency_band若设定为{3000,4000,8000}
    则低频频段为03000Hz,中频为30004000 Hz,高频为4000~8000 Hz,须注意最高频率不能超过采样率的一半。
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaAgc_Run举例部分。


2.38. IaaAgc_Run

  • 功能

    Agc算法处理

  • 语法

    ALGO_AGC_RET IaaAgc_Run(AGC_HANDLE handle, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    pss_audio_in 输入数据指针 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 数据量必须和调用IaaAgc_Init 时设定的point_number(一次IaaAgc_Run所需要的采样点数)相对应,处理后的数据会回写到pss_audio_in所指向的内存中。
  • 举例

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sys/time.h>
    
    #include "AudioProcess.h"
    
    /*  0:Fixed input file  1:User input file   */
    #define IN_PARAMETER 1
    
    int main(int argc, char *argv[])
    {
        short in_output[1024];
        unsigned int workingBufferSize;
        char *workingBuffer = NULL;
        AGC_HANDLE handle;
        AudioProcessInit agc_init, agc_get_init;
        AudioAgcConfig agc_config, agc_get_config;
        ALGO_APC_RET ret;
        int tempSize;
        FILE* fpIn;  //input file
        FILE* fpOut; //output file
        char src_file[128] = {0};
        char dst_file[128] = {0};
        /*********************User change section start*******************/
        short compression_ratio_input[7] = {-65,-55,-48,-25,-18,-12,0};
        short compression_ratio_output[7] = {-65,-50,-27,-12,-1,-1,-1};
        int freqBand[7] = {1000,6000,8000};
        int compressionRatioArrayLowInput[7] = {-65,-55,-48,-25,-18,-12,0};
        int  compressionRatioArrayLowOutput [7] = {-65,-50,-27,-12,-1,-1,-1};
        int  compressionRatioArrayMidInput [7] = {-65,-55,-48,-25,-18,-12,0};
        int  compressionRatioArrayMidOutput [7] = {-65,-50,-27,-12,-1,-1,-1};
        int  compressionRatioArrayHighInput [7] = {-65,-55,-48,-25,-18,-12,0};
        int  compressionRatioArrayHighOutput [7] = {-65,-50,-27,-12,-1,-1,-1};
        agc_init.point_number = 128;
        agc_init.channel = 1;
        agc_init.sample_rate = IAA_APC_SAMPLE_RATE_16000;
    
        agc_config.agc_enable = 1;
        agc_config.user_mode = 2;
        agc_config.gain_info.gain_max  = 40;
        agc_config.gain_info.gain_min  = -10;
        agc_config.gain_info.gain_init = 12;
        agc_config.drop_gain_max = 36;
        agc_config.drop_gain_step = 1;
        agc_config.attack_time = 1;
        agc_config.release_time = 1;
        agc_config.noise_gate_db = -80;
        agc_config.noise_gate_attenuation_db = 0;
        agc_config.drop_gain_threshold = -5;
        /*********************User change section end*******************/
        memcpy(agc_config.compression_ratio_input, compression_ratio_input, sizeof(compression_ratio_input));
        memcpy(agc_config.compression_ratio_output, compression_ratio_output, sizeof(compression_ratio_output));
        //(1)IaaAgc_GetBufferSize
        workingBufferSize = IaaAgc_GetBufferSize();
        workingBuffer = (char *)malloc(workingBufferSize);
    
        if(NULL == workingBuffer)
        {
            printf("malloc workingBuffer failed !\n");
            return -1;
        }
        printf("malloc workingBuffer succeed !\n");
        //(2)IaaAgc_Init
        handle = IaaAgc_Init(workingBuffer, &agc_init);
        if(NULL == handle)
        {
            printf("IaaAgc_Init failed !\n");
            return -1;
        }
        printf("IaaAgc_Init succeed !\n");
        //(3)IaaAgc_Config
        ret = IaaAgc_Config(handle, &agc_config);
        if(ret)
        {
            printf("IaaAgc_Config failed !\n");
            return -1;
        }
        printf("IaaAgc_Config succeed !\n");
    
        IaaAgc_SetAgcFreqBand(handle, freqBand);
        IaaAgc_SetLowFreqCompressionRatioCurve(handle,compressionRatioArrayLowInput, compressionRatioArrayLowOutput);
        IaaAgc_SetMidFreqCompressionRatioCurve(handle,compressionRatioArrayMidInput, compressionRatioArrayMidOutput);
        IaaAgc_SetHighFreqCompressionRatioCurve(handle,compressionRatioArrayHighInput, compressionRatioArrayHighOutput);
        //(4)IaaAgc_GetConfig
        ret = IaaAgc_GetConfig(handle, &agc_get_init, &agc_get_config);
        if(ret)
        {
            printf("IaaAgc_GetConfig failed !\n");
            return -1;
        }
        printf("IaaAgc_GetConfig succeed !\n");
        printf("agc_get_config.user_mode = %d, ...\n", agc_get_config.user_mode);
    
    #if IN_PARAMETER
        if(argc < 3)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", src_file);
        sscanf(argv[2], "%s", dst_file);
    #else
        sprintf(src_file, "%s", "./APC_AFE_16K.wav");
        if(argc < 2)
        {
            printf("Please enter the correct parameters!\n");
            return -1;
        }
        sscanf(argv[1], "%s", dst_file);
    #endif
    
        fpIn = fopen(src_file, "rb");
        if(NULL == fpIn)
        {
            printf("fopen in_file failed !\n");
            return -1;
        }
        printf("fopen in_file success !\n");
        fpOut = fopen(dst_file, "wb");
        if(NULL == fpOut)
        {
            printf("fopen out_file failed !\n");
            return -1;
        }
        printf("fopen out_file success !\n");
    
        fread(in_output, sizeof(char), 44, fpIn);
        fwrite(in_output, sizeof(char), 44, fpOut);
    
        tempSize = agc_init.point_number * agc_init.channel;
        while(tempSize == fread(in_output, sizeof(short), tempSize, fpIn))
        {
            //(5)IaaAgc_Run
            ret = IaaAgc_Run(handle, in_output);
            if(ret)
            {
                printf("IaaAnr_Run failed !\n");
                return -1;
            }
            fwrite(in_output, sizeof(short), tempSize, fpOut);
        }
        printf("Break:needBytes =%d \t nBytesRead = %d\n", agc_init.point_number * agc_init.channel, tempSize);
        //(6)IaaAgc_Free
        IaaAgc_Free(handle);
        free(workingBuffer);
        fclose(fpIn);
        fclose(fpOut);
        printf("APC_AGC end !\n");
    
        return 0;
    }
    

2.39. IaaAgc_Free

  • 功能

    释放Agc算法资源

  • 语法

    ALGO_AGC_RET IaaAgc_Free(AGC_HANDLE handle);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
  • 返回值

    无。

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAgc_Run举例部分。


2.40. IaaAgc_Reset

  • 功能

    重新初始化Agc算法

  • 语法

    AGC_HANDLE IaaAgc_Reset(char* working_buffer_address, AudioProcessInit *agc_init);
    
  • 形参

    参数名称 描述 输入/输出
    working_buffer_address Agc算法运行所使用的内存地址 输入
    agc_init Agc算法的初始化结构体指针 输入
  • 返回值

    返回值 结果
    非NULL 成功
    NULL 失败
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    无。


2.41. IaaAgc_GetConfig

  • 功能

    获取Agc算法的当前配置参数

  • 语法

    ALGO_AGC_RET IaaAgc_GetConfig(AGC_HANDLE handle, AudioProcessInit *agc_init, AudioAgcConfig *agc_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    agc_init Agc算法的初始化结构体指针 输出
    agc_config Agc算法中当前的配置参数 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    无。

  • 举例

    请参考IaaAgc_Run举例部分。


2.42. IaaApc_SetCompressionRatioCurve

  • 功能

    配置Apc中Agc算法压缩率曲线,可自行设定分段长度

  • 语法

    ALGO_AGC_RET IaaApc_SetCompressionRatioCurve(APC_HANDLE handle, short* CompressionRatioInput, short* CompressionRatioOutput, int curve_len);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    CompressionRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressionRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
    curve_len 压缩率数组长度
    数值范围[2, 20]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaApc_Run举例部分。


2.43. IaaAgc_SetCompressionRatioCurve

  • 功能

    配置Agc算法压缩率曲线,可自行设定分段长度

  • 语法

    ALGO_AGC_RET IaaAgc_SetCompressionRatioCurve(AGC_HANDLE handle, short* CompressionRatioInput, short* CompressionRatioOutput, int curve_len);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    CompressionRatioInput 压缩率输入,请参考agc_config中的compression ratio 输入
    CompressionRatioOutput 压缩率输出,请参考agc_config中的compression ratio 输入
    curve_len 压缩率数组长度
    数值范围[2, 20]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    请参考IaaAgc_Run举例部分。


2.44. IaaApc_NrEstimateReferAec

  • 功能

    参考Aec线性处理结果做降噪处里,避免非线性Aec造成Anr收敛异常

  • 语法

    ALGO_APC_RET IaaApc_NrEstimateReferAec (APC_HANDLE handle, short aec_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    aec_in 输入数据指针,提供给NR算法做噪声估算的数据,可使用麦克风数据或者AEC线性处理后结果 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.45. IaaApc_EnhanceNNBFMode

  • 功能

    针对串接Bf与Apc深度学习降噪算法之特化增强

  • 语法

    ALGO_APC_RET IaaApc_EnhanceNNBFMode(APC_HANDLE handle, APC_BF_HANDLE  handle2 , int is_enable);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    handle2 Bf 算法 handle 输入
    is_enable 0: 不使用 1:启用 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 此算法仅适用于Bf 模式3 搭配AudioAnrConfig anr_filter_mode5之情况。
    • 必须要引入Bf 算法库
    • 介于 IaaBf_Run 与 IaaApc_Run 之间

2.46. IaaApc_FilterDesign

  • 功能

    初始化滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型。

  • 语法

    ALGO_APC_RET IaaApc_FilterDesign(APC_HANDLE handle, int filter_cnt, AudioFilterConfig* filter_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    filter_cnt 滤波器序号,最多可设定10个滤波器
    范围:[1,10]
    输入
    filter_config 滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.47. IaaApc_FilterApply

  • 功能

    套用IIR滤波。

  • 语法

    ALGO_APC_RET IaaApc_FilterApply(APC_HANDLE handle, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    pss_audio_in 输入数据指针,滤波处理后的数据会写入同个指针中 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    //filter 1
    AudioFilterConfig filter_design;
    filter_design.q_factor = 5;
    filter_design.f0 = 1000;
    filter_design.type = EQ_NOTCH_FILTER;
    filter_design.gain = -10;
    //filter 2
    AudioFilterConfig filter_design2;
    filter_design2.q_factor = 5;
    filter_design2.f0 = 5000;
    filter_design2.type = EQ_NOTCH_FILTER;
    filter_design2.gain = -10;
    //filter 3
    AudioFilterConfig filter_design3;
    filter_design3.q_factor = 5;
    filter_design3.f0 = 500;
    filter_design3.type = EQ_NOTCH_FILTER;
    filter_design3.gain = -10;
    
    IaaApc_FilterDesign(handle, 1, &filter_design);
    IaaApc_FilterDesign(handle, 2, &filter_design2);
    IaaApc_FilterDesign(handle, 3, &filter_design3);
    
    while(read input data){
    ret1 = IaaApc_FilterApply(handle, input);
    }
    

2.48. IaaEq_FilterDesign

  • 功能

    初始化滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型。

  • 语法

    ALGO_EQ_RET IaaEq_FilterDesign (EQ_HANDLE handle, int filter_cnt, AudioFilterConfig* filter_config);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    filter_cnt 滤波器序号,最多可设定10个滤波器
    范围:[1,10]
    输入
    filter_config 滤波器参数,可设定中心频率、峰值增益、峰值带宽,滤波器类型 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • filter design出来结果需以频响曲线为准,并非设定多少频率,就一定达到目标增益
    • 因为此filter为IIR filter,会对相位造成非线性影响,建议摆放在所有算法的最后
    • 若Q值设定过大,代表能量下降幅度越陡,有可能造成其他频段不正常拉升的,请以频响曲线为准
    • 如果想要达到更陡的曲线,可以设计多个相同的滤波器迭加
    • 滤波器设计没有标准答案,以使用者需求为准
  • 举例

    • 下图为Q值设定过大范例

      filter_design.q_factor = 5;
      
      filter_design.f0 = 2000;
      
      filter_design.type = EQ_HIGH_PASS_FILTER;
      
      filter_design.gain = 3;
      

    • 滤波器迭加

      顾名思义,就是直接设定两个filter的系数

      //filter1
      AudioFilterConfig filter_design;
      
      filter_design.q_factor = 1;
      
      filter_design.f0 = 2000;
      
      filter_design.type = EQ_HIGH_PASS_FILTER;
      
      filter_design.gain = 0;
      
      //filter 2
      AudioFilterConfig filter_design2;
      
      filter_design2.q_factor = 1;
      
      filter_design2.f0 = 2000;
      
      filter_design2.type = EQ_HIGH_PASS_FILTER;
      
      filter_design2.gain = 0;
      

      下图蓝色是只套用filter_design的频响,橘色是同时套用filter_design跟filter_design2的频响,可以达到更陡的频率下降


2.49. IaaEq_FilterApply

  • 功能

    套用IIR滤波。

  • 语法

    ALGO_EQ_RET IaaEq_FilterApply(EQ_HANDLE handle, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    pss_audio_in 输入数据指针,滤波处理后的数据会写入同个指针中 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 举例

    //filter 1
    AudioFilterConfig filter_design;
    filter_design.q_factor = 5;
    filter_design.f0 = 1000;
    filter_design.type = EQ_NOTCH_FILTER;
    filter_design.gain = -10;
    //filter 2
    AudioFilterConfig filter_design2;
    filter_design2.q_factor = 5;
    filter_design2.f0 = 5000;
    filter_design2.type = EQ_NOTCH_FILTER;
    filter_design2.gain = -10;
    //filter 3
    AudioFilterConfig filter_design3;
    filter_design3.q_factor = 5;
    filter_design3.f0 = 500;
    filter_design3.type = EQ_NOTCH_FILTER;
    filter_design3.gain = -10;
    
    IaaEq_FilterDesign(handle, 1, &filter_design);
    IaaEq_FilterDesign(handle, 2, &filter_design2);
    IaaEq_FilterDesign(handle, 3, &filter_design3);
    
    while(read input data){
    ret1 = IaaEq_FilterApply(handle, input);
    }
    

2.50. IaaAnr_EnhanceNNBFMode

  • 功能

    针对串接Bf与Anr深度学习降噪算法之特化增强。

  • 语法

    ALGO_ANR_RET IaaAnr_EnhanceNNBFMode(ANR_HANDLE handle, ANR_BF_HANDLE  handle2 , int is_enable);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    handle2 Bf算法handle 输入
    is_enable 0: 不使用; 1:启用 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

  • 注意

    • 此算法仅适用于Bf 模式3 搭配AudioAnrConfig anr_filter_mode5之情况。
    • 必须要引入Bf 算法库
    • 介于 IaaBf_Run 与 IaaAnr_Run 之间

2.51. IaaApc_GetAPIVersion

  • 功能

    取得Apc算法库API版本。

  • 语法

    ALGO_APC_RET IaaApc_GetAPIVersion(unsigned short* major, unsigned short* minor);
    
  • 形参

    参数名称 描述 输入/输出
    major 输入数据指针,Apc API版本小数点前数据会写入同个指针中 输出
    minor 输入数据指针,Apc API版本小数点后数据会写入同个指针中 输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    - 库文件: libAPC_LINUX.so/ libAPC_LINUX.a

    2.52. IaaApc_SetHandleId

  • 功能

    配置Apc算法id

  • 语法

    ALGO_APC_RET IaaApc_SetHandleId(APC_HANDLE handle, int id);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    id Apc算法handle id
    数值范围:[0,100]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.53. IaaAnr_SetHandleId

  • 功能

    配置Anr算法id

  • 语法

    ALGO_ANR_RET IaaAnr_SetHandleId(ANR_HANDLE handle, int id);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    id Anr算法handle id
    数值范围:[0,100]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.54. IaaEq_SetHandleId

  • 功能

    配置Eq算法id

  • 语法

    ALGO_EQ_RET IaaEq_SetHandleId(EQ_HANDLE handle, int id);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    id Eq算法handle id
    数值范围:[0,100]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.55. IaaAgc_SetHandleId

  • 功能

    配置Agc算法id

  • 语法

    ALGO_AGC_RET IaaAgc_SetHandleId(AGC_HANDLE handle, int id);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    id Agc算法handle id
    数值范围:[0,100]
    输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.56. IaaApc_GetJsonFileSize

  • 功能

    Apc获取解析Json文件内容所需要的内存大小

  • 语法

    unsigned int IaaApc_GetJsonFileSize(char* jsonfile);
    
  • 形参

    参数名称 描述 输入/输出
    jsonfile Json档名 输入
  • 返回值

    返回值为解析Json文件内容所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.57. IaaApc_NrReadJson

  • 功能

    配置Json文件内容至Apc算法

  • 语法

    ALGO_APC_RET IaaApc_NrReadJson(APC_HANDLE handle, char* jsonBuffer, char* jsonfile, unsigned int buffSize);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    jsonBuffer 解析Json文件内容所使用的内存地址 输入
    jsonfile Json档名 输入
    buffSize 解析Json文件内容所需要的内存大小 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.58. IaaAnr_GetJsonFileSize

  • 功能

    Anr获取解析Json文件内容所需要的内存大小

  • 语法

    unsigned int IaaAnr_GetJsonFileSize(char* jsonfile);
    
  • 形参

    参数名称 描述 输入/输出
    jsonfile Json档名 输入
  • 返回值

    返回值为解析Json文件内容所需要的内存大小

  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.59. IaaAnr_NrReadJson

  • 功能

    配置Json文件内容至Anr算法

  • 语法

    ALGO_ANR_RET IaaAnr_NrReadJson(ANR_HANDLE handle, char* jsonBuffer, char* jsonfile, unsigned int buffSize);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    jsonBuffer 解析Json文件内容所使用的内存地址 输入
    jsonfile Json档名 输入
    buffSize 解析Json文件内容所需要的内存大小 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.60. IaaApc_EnableComfortNoise

  • 功能

    配置Apc舒适噪音算法并设定舒适噪音能量

  • 语法

    ALGO_APC_RET IaaApc_EnableComfortNoise(APC_HANDLE handle, int enable, int dB);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    enable 启用舒适噪音算法 输入
    dB 舒适噪音能量 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.61. IaaAnr_EnableComfortNoise

  • 功能

    配置Anr舒适噪音算法并设定舒适噪音能量

  • 语法

    ALGO_ANR_RET IaaAnr_EnableComfortNoise(ANR_HANDLE handle, int enable, int dB);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    enable 启用舒适噪音算法 输入
    dB 舒适噪音能量 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.62. IaaEq_EnableComfortNoise

  • 功能

    配置Eq舒适噪音算法并设定舒适噪音能量

  • 语法

    ALGO_EQ_RET IaaEq_EnableComfortNoise(EQ_HANDLE handle, int enable, int dB);
    
  • 形参

    参数名称 描述 输入/输出
    handle Eq算法handle 输入
    enable 启用舒适噪音算法 输入
    dB 舒适噪音能量 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.63. IaaAgc_EnableComfortNoise

  • 功能

    配置Agc舒适噪音算法并设定舒适噪音能量

  • 语法

    ALGO_AGC_RET IaaAgc_EnableComfortNoise(AGC_HANDLE handle, int enable, int dB);
    
  • 形参

    参数名称 描述 输入/输出
    handle Agc算法handle 输入
    enable 启用舒适噪音算法 输入
    dB 舒适噪音能量 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.64. IaaApc_EnableAutoSmooth

  • 功能

    配置Apc丝滑噪音算法

  • 语法

    ALGO_APC_RET IaaApc_EnableAutoSmooth(APC_HANDLE handle, int enable);
    
  • 形参

    参数名称 描述 输入/输出
    handle Apc算法handle 输入
    enable 启用丝滑噪音算法 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.65. IaaAnr_EnableAutoSmooth

  • 功能

    配置Anr丝滑噪音算法

  • 语法

    ALGO_ANR_RET IaaAnr_EnableAutoSmooth(ANR_HANDLE handle, int enable);
    
  • 形参

    参数名称 描述 输入/输出
    handle Anr算法handle 输入
    enable 启用丝滑噪音算法 输入
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


2.66. IaaApc_ApplyComfortNoise

  • 功能

    套用指定能量之舒适噪声

  • 语法

    ALGO_APC_RET IaaApc_ApplyComfortNoise(CngStruct cng_para, short* pss_audio_in);
    
  • 形参

    参数名称 描述 输入/输出
    cng_para 配置舒适噪声的结构体指针 输入
    pss_audio_in 欲混合舒适噪声之输入讯号,输出讯号会覆写在输入讯号上 输入/输出
  • 返回值

    返回值 结果
    0 成功
    非0 失败,参考错误码
  • 依赖

    • 头文件: AudioProcess.h

    • 库文件: libAPC_LINUX.so/ libAPC_LINUX.a


3. APC 数据类型


3.1. APC模块相关数据类型定义

数据类型 定义
AudioApcBufferConfig Apc算法的buffer配置参数结构体类型
AudioProcessInit Apc算法初始化参数结构体类型
APC_HANDLE Apc算法的句柄类型
AudioAnrConfig Apc算法中的Anr配置参数结构体类型
AudioEqConfig Apc算法中的Eq配置参数结构体类型
AudioHpfConfig Apc算法中的Hpf配置参数结构体类型
AudioAgcConfig Apc算法中的Agc配置参数结构体类型
AgcGainInfo Apc算法中Agc的增益参数结构体类型
IAA_APC_SAMPLE_RATE Apc算法定义的采样率类型
NR_CONVERGE_SPEED Anr算法的收敛速度类型
IAA_HPF_FREQ Hpf算法的截止频率类型
ANR_HANDLE Anr算法的句柄类型
EQ_HANDLE Eq算法的句柄类型
AGC_HANDLE Agc算法的句柄类型
APC_BF_HANDLE 定义Apc 算法 BF搭配深度学习降噪算法中Bf 的句柄类型
EQ_FILTER_TYPE IIR滤波器类型
AudioFilterConfig Apc算法中的IIR滤波配置参数结构体类型
CngStruct 配置舒适噪声的结构体指针

3.2. AudioApcBufferConfig

  • 说明

    定义Apc算法的功能选项参数结构体。

  • 定义

    typedef struct{
    
        unsigned int anr_enable;
    
        unsigned int eq_enable;
    
        unsigned int dr_enable;
    
        unsigned int vad_enable;
    
        unsigned int agc_enable;
    
    }AudioApcBufferConfig;
    
  • 成员

    成员名称 描述
    anr_enable Apc算法中Anr使能选项,用于协助计算Apc算法运行所需要的内存大小
    eq_enable Apc算法中Eq使能选项,用于协助计算Apc算法运行所需要的内存大小
    dr_enable 算法等待开发中,目前没有效果,建议关闭
    vad_enable Vad算法已建立独立模块,目前在APC中Vad已废弃,建议关闭
    agc_enable Apc算法中Agc使能选项,用于协助计算Apc算法运行所需要的内存大小
  • 注意事项

  • 相关数据类型及接口

    IaaApc_GetBufferSize

    IaaApc_Init

    IaaApc_Reset


3.3. AudioProcessInit

  • 说明

    定义Apc(Anr/Eq/Hpf/Agc)算法的初始化参数结构体。

  • 定义

    typedef struct {
    
        unsigned int point_number;
    
        unsigned int channel;
    
        IAA_APC_SAMPLE_RATE sample_rate;
    
    }AudioProcessInit;
    
  • 成员

    成员名称 描述
    point_number 算法处理一次的数据量,即一个帧多少个采样点,值为128或256根据chip来决定需要给Apc多少个short值。 取值范围:128或256 (根据chip 决定)
    channel 数据的声道数,若为双声道,则每帧给Apc的数据则为point_number的两倍。
    sample_rate 数据的取样频率
  • 注意事项

    无。

  • 相关数据类型及接口

    IaaApc_Init

    IaaApc_Reset

    IaaApc_GetConfig

    IaaAnr_Init

    IaaAnr_Reset

    IaaAnr_GetConfig

    IaaEq_Init

    IaaEq_Reset

    IaaEq_GetConfig

    IaaAgc_Init

    IaaAgc_Reset

    IaaAgc_GetConfig


3.4. APC_HANDLE


3.5. AudioAnrConfig

  • 说明

    定义Apc算法中的Anr配置参数结构体类型

  • 定义

    typedef struct{
    
        unsigned int anr_enable;
    
        unsigned int user_mode;
    
        int anr_intensity_band[6];
    
        int anr_intensity[7];
    
        unsigned int anr_smooth_level;
    
        NR_CONVERGE_SPEED anr_converge_speed;
    
        int anr_filter_mode;
    
    }AudioAnrConfig;
    
  • 成员

    成员名称 描述
    anr_enable 是否使能Anr算法
    user_mode Anr算法运行的模式
    anr_intensity_band 降噪频率范围
    范围[1,127];步长1
    anr_intensity 降噪强度,值越大降噪强度越高,但同时也会带来细节的丢失/损伤,建议值:10。
    范围[0,30];步长1
    anr_smooth_level 频域平滑程度,建议值:10
    范围[0,10];步长1
    anr_converge_speed 噪声收敛速度,建议值:mid
    范围[low;mid;high]
    anr_filter_mode 频域降噪滤波器
    范围[0,5];步长1
  • 注意事项

    • 当anr_enable为FALSE时,其他的Anr参数也不会起作用。

    • user_mode指定Anr的运行模式。0,表示Anr算法完全不使用其他的Anr参数,而是使用Anr算法内部的设定;1或2表示完全使用应用下的Anr参数

    • anr_intensity_band,降噪频率范围,后一个元素必须大于等于前1个元素。

      如:u32NrIntensityBand[0] = 10, 则:u32NrIntensityBand[1]必须大于等于10。

      当前采样率对应的最高频率平均分成128份,频率范围则是对应多少份组成一个频带。

      如:当前采样率为16K,对应的最大频率为8K,每一份为8000 / 128 ≈ 62.5Hz。如在{4,6,36, 49,50,51}的设定下,降噪频率范围为{0 ~ 4 * 62.5Hz, 4 ~ 6 * 62.5Hz, 6 ~ 36 * 62.5Hz, 36 ~ 49 * 62.5Hz, 49 ~ 50 * 62.5Hz, 50 ~ 51 * 62.5Hz, 51-127 * 62.5Hz} = {0 ~ 250Hz, 250 ~ 375Hz, 375 ~ 2250Hz, 2250 ~ 3062.5Hz, 3062.5 ~ 3125Hz, 3125 ~ 3187.5Hz, 3187.5Hz ~ 8000Hz},anr_intensity为降噪强度,可根据anr_intensity_band的频带划分,针对各个频带的噪声情况设置不同的参数。

    • anr_smooth_level,Anr算法处理频域的平滑程度,避免噪声估计时,在相邻频率上的压抑差距过大导致声音损伤。

    • anr_converge_speed,Anr算法的收敛速度,更新噪声的速度快慢,设定越快降噪收敛越快,但副作用是带来细节的丢失/损伤。

    • anr_filter_mode指定Anr算法。0为原算法,1 ~ 4为不同噪音估测之降噪算法。5为使用深度学习之降噪算法。

    • 当anr_filter_mode 指定5时, anr_converge_speed 必须为 [high], 另外anr_smooth_level参数不会影响此模式之结果。

    • anr_filter_mode 5有五种版本,版本一、二、四及五是针对带宽0到8kHz的频率范围,并支持取样率8kHz、16kH及32kHz和每帧点数128点的设定。版本3是针对带宽0到16kHz的频率范围,只支持取样率32kHz和每帧点数256点的设定。推荐使用最新版anr_filter_mode 5版本五。anr_filter_mode 5的版本可以在终端机输入以下指令得知

       strings libAPC_LINUX.a | grep ALGO 

  • 相关数据类型及接口

    IaaApc_Config

    IaaApc_GetConfig

    IaaAnr_Config

    IaaAnr_GetConfig


3.6. AudioEqConfig

  • 说明

    定义Apc算法中的Eq配置参数结构体类型。

  • 定义

    typedef struct{
    
        unsigned int eq_enable;
    
        unsigned int user_mode;
    
        short eq_gain_db[129];
    
    }AudioEqConfig;
    
  • 成员

    成员名称 描述
    eq_enable 是否使能Eq算法
    user_mode Eq算法的运行模式
    eq_gain_db Eq算法增益调节取值,将当前采样率的频率范围分成129个频率范围来进行调节,单位为1dB 范围[-50,20];步长1
  • 注意事项

    • 当eq_enable为FALSE时,其他的Eq参数也不会起作用。

    • user_mode指定Eq的运行模式。0,表示Eq使用预设的参数,预设参数全为0,不做任何增益或衰减;1,表示完全使用应用下的Eq参数。

    • eq_gain_db为增益调节的table,将当前采样率的频率范围分成129个频率范围来进行调节。如:当前采样率为16K,对应的最高频率为8K,8000 / 129 ≈ 62Hz,则单个调节的频率范围为62Hz,将0-8K划分成{0-1 * 62Hz,1-2 * 62Hz,2-3 * 62Hz,…,128-129 * 62Hz} = {0-62Hz,62-124Hz,124-186Hz,…,7938-8000Hz},每段对应一个增益值。

  • 相关数据类型及接口

    IaaApc_Config

    IaaApc_GetConfig

    IaaEq_Config

    IaaEq_GetConfig


3.7. AudioHpfConfig

  • 说明

    定义Apc算法中的Hpf配置参数结构体类型。

  • 定义

    typedef struct{
    
        unsigned int hpf_enable;
    
        unsigned int user_mode;
    
        IAA_HPF_FREQ cutoff_frequency;
    
    }AudioHpfConfig;
    
  • 成员

    成员名称 描述
    hpf_enable 是否使能Hpf算法
    user_mode Hpf算法的运行模式
    cutoff_frequency Hpf的截止频率,范围:[0,1,2,3,4]
  • 注意事项

    • 当hpf_enable为FALSE时,其他的Hpf参数也不会起作用。

    • user_mode指定Hpf的运行模式。0,表示预设的参数,不做任何衰减;1,表示使用应用下的Hpf参数。

    • cutoff_frequency为Hpf的截止频率,低于此频率的信号会被过滤掉。

  • 相关数据类型及接口

    IaaApc_Config

    IaaApc_GetConfig

    IaaEq_Config

    IaaEq_GetConfig


3.8. AudioAgcConfig

  • 说明

    定义Apc算法中的Agc配置参数结构体类型。

  • 定义

    typedef struct
    
    {
    
        unsigned int agc_enable;
    
        unsigned int user_mode;
    
        //gain setting
    
        AgcGainInfo gain_info;
    
        unsigned int drop_gain_max;
    
        //attack time, release time
    
        unsigned int attack_time;
    
        unsigned int release_time;
    
        //target level
    
        short compression_ratio_input[7];
    
        short compression_ratio_output[7];
    
        int drop_gain_threshold;
    
        // noise gate
    
        int noise_gate_db;
    
        unsigned int noise_gate_attenuation_db;
    
        unsigned int gain_step;
    
    }AudioAgcConfig;
    
  • 成员

    成员名称 描述
    agc_enable 是否使能Agc算法
    user_mode Agc算法的运行模式,设定1为时域处理模式,设定2为频域处理模式,频域处理对应API请参考下方注意事项部分
    gain_info Agc算法的增益信息,定义AGC增益的最大、最小和初始值
    drop_gain_max 瞬间增益下降的最大值,防止输出饱和,若输出加上当前Gain超出drop_gain_threshold所设定的dB值,Agc会瞬间降低Gain避免当前信号的峰值超过drop_gain_threshold。 范围[0,60];步长1 注意:此值仅代表能下降的范围,但具体能下降到何值还需参考AGC增益的最小值。
    attack_time 增益下降的时间步长,以4毫秒为1单位,若设定2则为8毫秒判断一次是否降Gain 范围[1,20];步长1
    release_time 增益增加的时间步长,以4毫秒为1单位,若设定2则为8毫秒判断一次是否升Gain 范围[1, 20] ;步长1
    compression_ratio_input 配合compression_ratio_output 使用,透过多个转折点实现多斜率的曲线,得到input power level跟output power level之间的关系。 范围[-80,0]dBFS;步长1
    compression_ratio_output 配合compression_ratio_input使用,透过多个转折点实现多斜率的曲线,得到input power level跟output power level之间的关系。 范围[-80,0]dBFS;步长1
    drop_gain_threshold 衰减阈值,当信号峰值幅度超过此值后,会瞬间衰减,衰减幅度受drop_gain_max跟gain_info所限制。 范围[-80,0]dB;步长1
    noise_gate_db 噪声阈值,当信号小于此值时,当作噪声处理, Case1: 若设定noise_gate_db 从-80到0,当前gain值会根据release/attack time的时间将Gain值收敛成0。 Case2: 若设定noise_gate_db 从1到80,当信号小于此值时,Gain值将不会做更改,会保留前一帧的Gain值。 范围[-80,80];步长1
    noise_gate_attenuation_db 当噪声阈值起效果时,输入源的衰减百分比 范围[0,100];步长1
    gain_step 套用增益的速率,以0.5dB为一个单位,若设定为1,则每帧依照需求套用±0.5dB。 此值设定的越高,拉升和降低音量的速率越快。 范围[1,10]; 步长1
  • 注意事项

    • 当agc_enable为FALSE时,其他的Agc参数也不会起作用。

    • user_mode指定Agc的运行模式。0,表示Agc算法完全不使用其他的Agc参数,而是使用Agc算法内部的设定;1,表示完全使用应用下的Agc参数。

    • Compression ratio Curve定义输入输出能量之间的关系,透过设定七个点可以得到六段不同的斜率转折,举例来说,参数设定如下:

      compression_ratio_input[7] = {-80, -60, -50,-40,-30,-12,0}
      
      compression_ratio_output[7] = {-80, -45, -36, -27, -18, -9, -6}
      

      得到的曲线如下图所示

      若不需这么多段不同斜率,可以将最后的compression ratio参数设成0,如下参数

      compression_ratio_input[7] = {-70, -60, -30, 0,0,0,0};
      
      compression_ratio_output[7] = {-60, -50, -10, -3, 0,0,0};
      

      曲线如下图

    • Noise gate设定有两种模式,可以将Gain收敛到0或维持Gain值不变,收敛到0的状况可避免小于noise gate的信号被放大,维持噪声稳定度,维持Gain值不变可避免语音的起头与尾音消失的"呼吸现象"。

    • 设定user mode为2,开启频域处理模式,请参考下列API配合使用

      IaaApc_SetLowFreqCompressionRatioCurve

      IaaApc_SetMidFreqCompressionRatioCurve

      IaaApc_SetHighFreqCompressionRatioCurve

      IaaApc_SetAgcFreqBand

      IaaAgc_SetLowFreqCompressionRatioCurve

      IaaAgc_SetMidFreqCompressionRatioCurve

      IaaAgc_SetHighFreqCompressionRatioCurve

      IaaAgc_SetAgcFreqBand

  • 相关数据类型及接口

    IaaApc_Config

    IaaApc_GetConfig

    IaaAgc_Config

    IaaAgc_GetConfig


3.9. AgcGainInfo

  • 说明

    定义Apc算法中Agc的增益参数结构体类型。

  • 定义

    typedef struct
    
    {
    
        int gain_max; //gain maximum
    
        int gain_min; //gain minimum
    
        int gain_init; //default gain (initial gain)
    
    }AgcGainInfo;
    
  • 成员

    成员名称 描述
    gain_max 增益最大值 范围[0,60];步长1
    gain_min 增益最小值 范围[-20,30];步长1
    gain_init 增益初始值 范围[-20,60];步长1
  • 注意事项

    无。

  • 相关数据类型及接口

    AudioAgcConfig


3.10. IAA_APC_SAMPLE_RATE

  • 说明

    定义Apc算法中的采样率类型。

  • 定义

    typedef enum {
    
        IAA_APC_SAMPLE_RATE_8000 = 8000 ,
    
        IAA_APC_SAMPLE_RATE_16000 = 16000 ,
    
        IAA_APC_SAMPLE_RATE_48000 = 48000 ,
    
    }IAA_APC_SAMPLE_RATE;
    
  • 成员

    成员名称 描述
    IAA_APC_SAMPLE_RATE_8000 8K采样率
    IAA_APC_SAMPLE_RATE_16000 16K采样率
    IAA_APC_SAMPLE_RATE_48000 48K采样率
  • 注意事项

    无。

  • 相关数据类型及接口

    AudioProcessInit


3.11. NR_CONVERGE_SPEED

  • 说明

    定义Apc算法中Anr收敛速度类型。

  • 定义

    typedef enum {
    
        NR_SPEED_LOW,
    
        NR_SPEED_MID,
    
        NR_SPEED_HIGH
    
    } NR_CONVERGE_SPEED;
    
  • 成员

    成员名称 描述
    NR_SPEED_LOW 低速
    NR_SPEED_MID 中速
    NR_SPEED_HIGH 高速
  • 注意事项

    • NR收敛速度低/中/高分别代表3/2/1帧更新一次噪声压抑
  • 相关数据类型及接口

    AudioAnrConfig


3.12. IAA_HPF_FREQ

  • 说明

    定义Apc算法中Hpf截止频率类型。

  • 定义

    typedef enum {
        AUDIO_HPF_FREQ_80 , /* 80Hz*/
        AUDIO_HPF_FREQ_120, /*120Hz*/
        AUDIO_HPF_FREQ_150, /*150Hz*/
        AUDIO_HPF_FREQ_BUTT,
        AUDIO_HPF_FREQ_500, /*500Hz*/
    }IAA_HPF_FREQ;
    
  • 成员

    成员名称 描述
    AUDIO_HPF_FREQ_80 80Hz
    AUDIO_HPF_FREQ_120 120Hz
    AUDIO_HPF_FREQ_150 150Hz
    AUDIO_HPF_FREQ_500 500Hz
    AUDIO_HPF_FREQ_BUTT
  • 相关数据类型及接口

    AudioHpfConfig


3.13. ANR_HANDLE


3.14. EQ_HANDLE


3.15. AGC_HANDLE


3.16. APC_BF_HANDLE

  • 说明

    定义Apc 算法 Bf搭配深度学习降噪算法中Bf 的句柄类型

  • 定义

    typedef void* APC_BF_HANDLE;
    
  • 相关数据类型及接口

    IaaApc_EnhanceNNBFMode

  • 注意事项

    • 此句柄类型仅适用BF模式3 以及 AudioAnrConfig 中anr_filter_mode 5做增强之情况,其余模式不会有影响。

3.17. EQ_FILTER_TYPE

  • 功能

    定义Apc算法中IIR滤波器类型。

  • 语法

    typedef enum {
    
        EQ_NOTCH_FILTER ,
    
        EQ_HIGH_PASS_FILTER,
    
        EQ_LOW_PASS_FILTER,
    
    }EQ_FILTER_TYPE;
    
  • Member

    Member name Description
    EQ_NOTCH_FILTER 带阻滤波器
    EQ_HIGH_PASS_FILTER 高通滤波器
    EQ_LOW_PASS_FILTER 低通滤波器
  • 相关数据类型及接口

    AudioFilterConfig


3.18. AudioFilterConfig

  • 功能

    定义Apc算法中iir滤波的参数结构体类型。

  • 语法

    typedef struct{
    
        EQ_FILTER_TYPE type;
    
        int f0;
    
        int q_factor;
    
        int gain;
    
    }AudioFilterConfig;
    
  • 成员

    成员名称 描述
    type 滤波器类型,根据EQ_FILTER_TYPE设定
    f0 滤波中心频率,最大值不能超过奈奎斯特频
    q_fctor 滤波峰值带宽
    gain 峰值增益
  • 相关数据类型及接口

    EQ_FILTER_TYPE

  • 注意

    • type

      分成3种,分别为notch filter/high-pass filter/low-pass filter,三种filter的典型Frequency response请参考下图

      1. Notch fitler 是针对特定频率去压抑或增益
      2. High-pass filter 是压抑特定频率以下的能量
      3. Low-pass filter 是压抑特定频率以上的能量

    • f0

      对HPF跟LPF来说是转折频率,频响曲线的拐弯处,所谓-3dB频率点,而对Notch filter来说是center frequency,如下图所示

    • q_fctor

      Q值为品质因子,下面为Q值之公式,f_0f_1f_2请参考上图

      Q=\frac{f_0}{f_2-f_1}
    • gain

      Gain为增益,对HPF跟LPF来说是稳定状态的增益,对Notch filter来说是Peak的值

      filter_design.q_factor = 1;
      
      filter_design.f0 = 2000;
      
      filter_design.type = EQ_HIGH_PASS_FILTER;
      
      filter_design.gain = 3;
      

      画出的频响曲线如下图

      filter_design.q_factor = 1;
      
      filter_design.f0 = 2000;
      
      filter_design.type = EQ_NOTCH_FILTER;
      
      filter_design.gain = 3;
      

      画出的频响曲线如下图


3.19. CngStruct

  • 功能

    配置舒适噪声的结构体指针。

  • 语法

    typedef struct
    {
        int energy_dbfs;
    
        short point_number;
    
        int channel_num;
    
    }CngStruct;
    
  • 成员

    成员名称 描述
    energy_dbfs 欲迭加之舒适噪声能量
    point_number 输入讯号之长度
    channel_num 输入讯号之信道数
  • 相关数据类型及接口

    IaaApc_ApplyComfortNoise

  • 注意事项

    使用此API并为双信道模式时,讯号应为左右声道交叉排列


4. 错误码

APC API 错误码如下表所示:

表 4‑1 APC API错误码

错误码 宏定义 描述
0x00000000 ALGO_APC_RET_SUCCESS APC运行成功
0x10000501 ALGO_APC_RET_INIT_ERROR APC尚未初始化
0x10000502 ALGO_APC_RET_INVALID_HANDLE HANDLE无效
0x10000503 ALGO_APC_RET_INVALID_SAMPLE_RATE 取样频率不支持
0x10000504 ALGO_APC_RET_INVALID_POINT_NUMBER 每帧点数不支援
0x10000505 ALGO_APC_RET_INVALID_CHANNEL 通道数不支持
0x10000506 ALGO_APC_ANR_RET_INVALID_ENABLE ANR开关参数设置无效
0x10000507 ALGO_APC_ANR_RET_INVALID_MODE ANR模式参数设置无效
0x10000508 ALGO_APC_ANR_RET_INVALID_INTENSITY ANR强度参数设置无效
0x10000509 ALGO_APC_ANR_RET_INVALID_SMOOTH_LEVEL ANR平滑化参数设置无效
0x10000510 ALGO_APC_ANR_RET_INVALID_COVERGE_SPEED ANR收敛速度参数设置无效
0x10000511 ALGO_APC_EQ_RET_INVALID_ENABLE EQ开关参数设置无效
0x10000512 ALGO_APC_EQ_RET_INVALID_MODE EQ模式参数设置无效
0x10000513 ALGO_APC_EQ_RET_INVALID_TABLE EQ参数设置无效
0x10000514 ALGO_APC_HPF_RET_INVALID_ENABLE HPF开关参数设置无效
0x10000515 ALGO_APC_HPF_RET_INVALID_MODE HPF模式参数设置无效
0x10000516 ALGO_APC_HPF_RET_INVALID_TABLE HPF参数设置无效
0x10000517 ALGO_APC_AGC_RET_INVALID_ENABLE AGC开关参数设置无效
0x10000518 ALGO_APC_AGC_RET_INVALID_MODE AGC模式参数设置无效
0x10000519 ALGO_APC_AGC_RET_INVALID_COMPRESSION_RATIO AGC压缩曲线参数设置无效
0x10000520 ALGO_APC_AGC_RET_INVALID_FREQUENCY_BAND AGC频段设置无效
0x10000521 ALGO_APC_AGC_RET_INVALID_DROP_GAIN_MAX AGC防饱和参数设置无效
0x10000522 ALGO_APC_AGC_RET_INVALID_GAIN_STEP AGC套用增益速率设置无效
0x10000523 ALGO_APC_AGC_RET_INVALID_RELEASE_TIME AGC复原时间参数设置无效
0x10000524 ALGO_APC_AGC_RET_INVALID_ATTACK_TIME AGC削减时间参数设置无效
0x10000525 ALGO_APC_AGC_RET_INVALID_NOISE_GATE AGC噪声阀值参数设置无效
0x10000526 ALGO_APC_AGC_RET_INVALID_NOISE_ATTENU AGC噪声衰减设置无效
0x10000527 ALGO_APC_AGC_RET_INVALID_DROP_GAIN_LEVEL AGC防饱和阀值参数设置无效
0x10000528 ALGO_APC_AGC_RET_INVALID_GAIN_INFO AGC增益限制参数设置无效
0x10000529 ALGO_APC_RET_API_CONFLICT 其他API正在运行
0x10000530 ALGO_APC_RET_INVALID_CALLING 呼叫API顺序错误
0x10000531 ALGO_APC_RET_FAILED 参数设置错误