9.10. JL_KWS打断唤醒

概述

本文档简单展示了jlkws打断唤醒的说明,具体实现代码均在 jlkws.c 中查看

9.10.1. 应用实例

  • 1.使用wifi_story_machine工程,进入 app_config.h ,开启宏 #define CONFIG_ASR_ALGORITHM  JLKWS_ALGORITHM //本地打断唤醒算法选择

  • 2.未获取授权时,默认使用临时授权,临时授权每次开机后算法可使用二十分钟,逾时临时授权失效唤醒失效

  • 3.获取授权方式:发送邮件到 weiyushu@zh-jieli.com 杰理开发团队进行申请,然后把申请到的客户批次号填写到 apps/common/net/platform_cfg.c 的get_kws_auth_key()和get_kws_code()函数中

  • 4.第一次需联网获取到权限以后会把license记录到flash保存,之后可不需联网进行本地唤醒

#if (defined CONFIG_ASR_ALGORITHM) && (CONFIG_ASR_ALGORITHM == JLKWS_ALGORITHM)
char *get_kws_auth_key(void)
{
    return "kws_test_key";
}

char *get_kws_code(void)
{
    return "jieli_TWbvCB";
}
#endif

9.10.2. 操作说明

    1. 连接配置好对应的MIC引脚

    • jlkws.c中编码参数默认使用req.enc.channel_bit_map = BIT(CONFIG_AISP_MIC0_ADC_CHANNEL==1); 对应板级文件board.c使用adc1对应引脚

    #define TCFG_MIC_IO_PORT                    {-1/*MIC0P*/, -1/*MIC0N*/, IO_PORTC_11/*MIC1P*/, IO_PORTC_12/*MIC1N*/}
    
    1. app_config.h

    • 打开 #define CONFIG_ASR_ALGORITHM AISP_ALGORITHM 本地打断唤醒算法选择

    1. 具体实现流程代码在 jlkws.c 文件中

    1. 唤醒词

    //jl_far_kws_model_process识别数据后返回值
    //ret = jl_far_kws_model_process(kws, model, (u8 *)near_data_buf, sizeof(near_data_buf));
    //if (ret > 1) {
        //log_info("jlkws wakeup event : %d", ret);
    唤醒词 - 返回值
    小杰小杰  2
    播放音乐  4
    暂停播放  5
    增大音量  7
    减小音量  8
    上一首    9
    下一首    10
    
  • 5.回声消除
    • 回声消除app_cofnig.h中打开CONFIG_AEC_ENC_ENABLE宏,具体回声消除参数查看jlkws.c中宏包住部分代码, 回声消除使用16k采样率数据

    • 代码中默认使用硬件回采在app_config.h中打开宏#define CONFIG_AEC_HW_REC_LINEIN_ENABLE //AEC回采使用硬件通道数据

    #if defined TCFG_AUDIO_ADC_ALL_CHANNEL_OPEN && defined CONFIG_AISP_LINEIN_ADC_CHANNEL && defined CONFIG_AEC_HW_REC_LINEIN_ENABLE
    if (req.enc.aec_enable) {
        aec_param.output_way = 1;    //1:使用硬件回采 0:使用软件回采
        req.enc.rec_linein_channel_bit_map = BIT(CONFIG_AISP_LINEIN_ADC_CHANNEL); //设置linein的回采通道
        req.enc.channel_bit_map |= BIT(CONFIG_AISP_LINEIN_ADC_CHANNEL);      //配置回采硬件通道
        if (CONFIG_AISP_LINEIN_ADC_CHANNEL < CONFIG_PHONE_CALL_ADC_CHANNEL) {
            req.enc.ch_data_exchange = 1;    //如果回采通道使用的硬件channel比MIC通道使用的硬件channel靠前的话处理数据时需要交换一下顺序
        }
    }
    #endif
    
    //使用adc0的linein进行回采
    #define TCFG_LINEIN_IO_PORT                 {IO_PORTC_07/*AUX0P*/, IO_PORTC_06/*AUX0N*/, -1/*AUX1P*/, -1/*AUX1N*/}
    
    • 使用软件回采,关掉app_config.h中宏#define CONFIG_AEC_HW_REC_LINEIN_ENABLE //AEC回采使用硬件通道数据

    • 软件回采不同采样率的需要打开宏#define CONFIG_AEC_USE_PLAY_MUSIC_ENABLE //播歌时需要使用AEC进行变采样,而且回采的采样率必须为16k的整数倍,解码部分必须强制变采样为16k的整数倍,在解码部分加上强制变采样参数req.dec.force_sr,并在编码参数中加上aec_param.dac_ref_sr回采的参考采样率

  • 6.查看唤醒时的回声消除数据
    • 在app_config.h中打开宏 #define CONFIG_AUDIO_ENC_AEC_DATA_CHECK //打开查看AEC操作数据(mic/dac/aec数据)

    • 在jlkws.c中打开宏#define AEC_DATA_TO_SD 1 //将唤醒前的mic/dac/aec数据写卡进行查看,3channel(mic,dac,aec)

    • 插入sd开机后,进行唤醒测试,唤醒成功后,可查看数据aec.pcm中的三通道数据mic/dac/aec数据,可查看aec效果