Rdzleo
c6ecdb124c
feat(audio): 同步 Kapi 软件 AEC + NULL crash fix 到数字人项目
来源: Kapi commit 63b21fd (NULL fix) + a369796 (软件 AEC) 完整移植
改动:
- components/common/src/volc_rtc.c
on_global_error 加 message ? message : "(null)" 防御.
解决: idle ≥10 分钟后服务端 session 超时 / NAT 表过期触发的
printf("%s", NULL) → strlen panic → 设备重启.
- main/CMakeLists.txt
REQUIRES 末尾加 esp-sr (提供 esp_aec.h 同步 API).
- main/application.h
+7 个 AEC 成员 + 5 个函数声明 (recorder/player pipeline 后).
- main/application.cc
+InitAec / DeinitAec / AppendRefSamples / GetDelayedRef / ApplyAEC (~170 行).
OnAudioOutput 三个 codec output 位置都加 AppendRefSamples hook.
ReadAudio 两条路径 (recorder_pipeline + codec 直读) 加 lazy InitAec
+ ApplyAEC + target_samples = max(samples, chunk_size).
PHASE8_DIAG_ENABLE 默认 0 (诊断埋点已完成根因定位, 关闭减少日志噪声).
实测效果 (30 分钟设备验证):
AI 说话: mic=285 ref=8310 clean=31 (消除 89%)
AI 说话: mic=660 ref=7489 clean=57 (消除 91%)
AI 说话: mic=156 ref=2748 clean=0 (消除 100%)
用户说话: mic=224 ref=8 clean=224 (passthrough 正常)
资源占用:
Flash +59 KB (+1.2%)
Internal SRAM +35-50 KB (+10-15%)
PSRAM +10-15 KB (<0.2%)
Core 1 CPU +6-12% @240MHz
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>