T5语音前端算法使用的是原厂提供的AEC、NS、VAD算法(截至3.12.14版本,后面版本如有更新会更新此文档),目前工作流程如下图所示:
以下是一些参数的设置方法:
MIC
增益:mic_gain
在tkl_ai_init
接口中,目前默认设置成了0x2f
,原厂推荐设置0x2d
Code: Select all
OPERATE_RET tkl_ai_init(TKL_AUDIO_CONFIG_T *pconfig, INT32_T count) { int ret; bk_printf("audio trace: %s %d\r\n", __func__, __LINE__); if (pconfig == NULL) return OPRT_INVALID_PARM; aud_voc_setup.aec_enable = 1; aud_voc_setup.mic2_disable = !pconfig->enable; if (pconfig->card == TKL_AUDIO_TYPE_UAC) { aud_voc_setup.data_type = AUD_INTF_VOC_DATA_TYPE_PCM; aud_voc_setup.spk_mode = AUD_DAC_WORK_MODE_SIGNAL_END; aud_voc_setup.mic_type = AUD_INTF_MIC_TYPE_UAC; aud_voc_setup.spk_type = AUD_INTF_SPK_TYPE_UAC; bk_printf("audio trace: %s %d\r\n", __func__, __LINE__); } else{ aud_voc_setup.data_type = AUD_INTF_VOC_DATA_TYPE_PCM; aud_voc_setup.mic_mode = AUD_ADC_MODE_DIFFEN; aud_voc_setup.spk_mode = AUD_DAC_WORK_MODE_DIFFEN; aud_voc_setup.mic_gain = 0x2f; // mic 增益,增益确定之后,声音音量会在0-增益之间调整 aud_voc_setup.spk_gain = 0x2f; // spk 增益 aud_voc_setup.mic_type = AUD_INTF_MIC_TYPE_BOARD; aud_voc_setup.spk_type = AUD_INTF_SPK_TYPE_BOARD; bk_printf("audio trace: %s %d\r\n", __func__, __LINE__); } ... }
AEC算法参数:
aec_enable
在
audio_recorder_init
接口默认使能。Code: Select all
int audio_recorder_init(audio_recorder_cfg_t *cfg) { int rt = OPRT_OK; TUYA_CHECK_NULL_RETURN(audio_recorder = audio_recorderer_create(cfg), OPRT_MALLOC_FAILED); TKL_AUDIO_CONFIG_T audio_config; memset(&audio_config, 0, sizeof(TKL_AUDIO_CONFIG_T)); audio_config.enable = 1; //! enable aec ... }
AEC算法参数:
drc
、ec_depth
NS参数:
ns_level
、ns_param
位于
aud_tras_drv_aec_cfg
函数,该函数有多个,选择multimedia/aud/
目录下的。Code: Select all
static bk_err_t aud_tras_drv_aec_cfg(void) { ... temp_aec_info->aec_config->mic_delay = 16;//0x0 temp_aec_info->aec_config->ec_depth = 0x14;//0x14 8 0x0e 越大消除内容越多 temp_aec_info->aec_config->voice_vol =0x0d;//0xe temp_aec_info->aec_config->ns_level = 0x5;//0x2 0x5 降噪级别,越小降噪越少 temp_aec_info->aec_config->ns_para = 0x02;//0x1 0x02 #if (CONFIG_DMIC_DUAL_NC_ALGRITHMS_OPEN) temp_aec_info->aec_config->drc = 0x0a;//0xf 2 增益aec之后的音频数据,越大增益越大 #else temp_aec_info->aec_config->drc = 0x04;//0xf 2 增益aec之后的音频数据,越大增益越大 #endif ... }
VAD算法参数:
scale
、start_threshold_ms
在
audio_recorder_init
接口设置。Code: Select all
int audio_recorder_init(audio_recorder_cfg_t *cfg) { ... ty_vad_config_t vad_config; memset(&vad_config, 0, sizeof(ty_vad_config_t)); vad_config.silence_threshold_ms = 0; vad_config.scale = 1.0; // 能量强调,越小越被声音触发,建议0.8,1.0,1.2 vad_config.sample_rate = cfg->sample_rate; vad_config.channel = cfg->channel; vad_config.start_threshold_ms = cfg->vad_active_ms; // 默认300ms,越长越不容易触发vad vad_config.end_threshold_ms = cfg->vad_silence_ms; // 默认800ms,越短越容易断句 vad_config.vad_frame_duration = 20; TUYA_CALL_ERR_GOTO(ty_vad_app_init(&vad_config), __failed); ... }
KWS算法:如需替换参考此文档 https://developer.tuya.com/cn/docs/iot- ... 7%E6%B3%95
音频编码:支持
PCM
、OPUS
编码, 请参考tuyaos_demo_ai_toy
的README.md