更新时间:2025-05-14 07:33:49下载pdf
语音交互是 AI 硬件的基本功能,交互过程中音频数据的质量,是保障产品功能、体验的基础,也是保证语音识别正确率,大模型理解、应答准确度的前提条件。因此,每个 AI 硬件产品都需要进行音频质量调试。
涂鸦提供了基础的音频数据调试方法,以协助您在开发过程中获取音频数据,并结合数据对产品结构、硬件、软件进行调整,保障音频数据质量,提高唤醒率、语音识别率,优化大模型交互体验。
Wukong AI 硬件开发框架提供了基础的音频调试方法,以 tuyaos_demo_ai_toy
为例,操作步骤如下:
开启音频调试功能。修改 tuya_ai_debug.h
,将 TUYA_UPLOAD_DEBUG
设置为 1
。
#define TUYA_UPLOAD_DEBUG 1
修改 tuya_ai_debug.c
,将服务端 ip
修改成上位机的 ip
,一般为您的调试电脑的 ip
。
#define TCP_SERVER_IP "192.168.32.160" // IP 修改成您的调试上位机所在的电脑的 IP
#define TCP_SERVER_PORT 5055
将项目中 scripts/ai_audio_proc.py
复制到 windows
,并运行该文件。
需要安装 pyaudio 库。
python ai_audio_proc.py
编译固件,烧录到设备上,启动、配网,然后进行对话。在对话过程中,固件会在拾音、上传时,自动将 AEC
、VAD
阶段的音频数据上传到当前脚本目录并播放,可佩戴耳机检查语音数据是否完整、清晰、干净。
使用专业工具分析音频数据文件,建议使用 Ocenaudio 来分析、对比抓取到的音频文件。
推荐参考涂鸦提供的硬件方案,根据方案的建议调整硬件结构、位置,采购方案推荐的配套器件:
以下是 VAD
的一些可以设置的参数:
#define TY_AI_AUDIO_CFG_DEF { \
.sample_rate = TKL_AUDIO_SAMPLE_16K, \
.sample_bits = TKL_AUDIO_DATABITS_16, \
.channel = TKL_AUDIO_CHANNEL_MONO, \
.upload_slice_duration = 100, \
.record_duration = 10000, \
.vad_active_duration = 300, \
.vad_pre_active_duration = 500,\
.vad_inactive_duration = 500, \
.vad_frame_duration = 10, \
.vad_silence_timeout = 30000, \
}
起始音频丢失主要是因为能量未能触发 VAD
,中间语音触发 VAD
之后,需要将起始音频尽量包含进来,需要调整 vad_pre_active_duration
,目前默认 500ms,已经基本避免起始音频丢失。
说话停顿导致语音中断,需要调整 vad_inactive_duration
以减慢 VAD
的停止时间,可以让两段话变成一段话,但是会造成检测的等待时间变长,响应时间变长。目前默认 500ms,可以调整到 800ms 验证效果。
另外,涂鸦云端也会对上传的语音进行 VAD
检测,如果发现有效人声,会打断当前会话,实现随意说功能。
调整 AEC
的参数可以修改回声消除的 ec_depth
,一般声音越大,ec_depth
需要设置的越大。调整 ec_depth
需要在 aud_tras_drv_aec_cfg
函数中,修改 temp_aec_info->aec_config->ec_depth
的值,一般推荐 0x14
。
// aec parameter
temp_aec_info->aec_config->mic_delay = 16;//0x0
temp_aec_info->aec_config->ec_depth = 0x2;//0x14
temp_aec_info->aec_config->voice_vol =0x0d;//0xe
temp_aec_info->aec_config->ns_level = 0x5;//0x2
temp_aec_info->aec_config->ns_para = 0x02;//0x1
temp_aec_info->aec_config->drc = 0x0;//0xf
调整 MIC
增益可以增加 MIC
的拾音距离,但是也会收到额外的杂音。需要您按需调整,调试达到平衡状态。
/**
* @brief ai set mic volume
*
* @param[in] card: card number
* @param[in] chn: channel number
* @param[in] vol: mic volume,[0, 100]
*
* @return OPRT_OK on success. Others on error, please refer to tkl_error_code.h
*/
OPERATE_RET tkl_ai_set_vol(INT32_T card, TKL_AI_CHN_E chn, INT32_T vol)
// example
tkl_ai_set_vol(TKL_AUDIO_TYPE_BOARD, 0, 100);
如果您具备语音处理的专业能力,有丰富的经验和积累,可以自行处理语音前端。需要将您自己的语音算法集成到 T5
的开发框架,并将 T5
自带的语音前端处理替换成自己的。
目前语音前端的数据入口位于 aud_tras_drv.c
文件的 aud_tras_aec
函数,此函数将 MIC
接收到的音频数据、回采电路采集到的参考音频数据,通过 aec_proc
进行回声消除, 只需要替换该接口即可:
static bk_err_t aud_tras_aec(void)
{
...
aec_proc(aec_info_pr->aec, aec_info_pr->ref_addr, aec_info_pr->mic_addr, aec_info_pr->out_addr);
...
}
void aec_proc(AECContext* aec, int16_t* rin, int16_t* sin, int16_t* out);
AEC 处理之后的数据,会通过 tkl_ai_init
接口注册的 put_cb
发送给应用层,put_cb
将数据发送给 VAD
现场进行处理,检测是否有有效的人声。需要对标ty_vad_app
实现相关功能,即可替换。ty_vad_app
目前位于 vendor/T5/tuyaos/tuyaos_adapter/src/misc/ty_vad_app.c
。
在开发过程遇到问题,可以到 TuyaOS 开发者论坛 联网单品开发版块 发帖咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈