xiaozhi-esp32 icon indicating copy to clipboard operation
xiaozhi-esp32 copied to clipboard

在哪里启用可语音打断的实时对话模式

Open MIKEDOG369 opened this issue 4 months ago • 12 comments

在哪里启用可语音打断的实时对话模式,在配置menuconfig里面哪个选项,echoear的板子

MIKEDOG369 avatar Aug 12 '25 12:08 MIKEDOG369

Use Device AEC 设置为 true

78 avatar Aug 12 '25 13:08 78

使用设备 AEC 设置为 true

这个使用小问题,每次当我说话打断的时候,前面几个字不会被录入

MIKEDOG369 avatar Aug 13 '25 01:08 MIKEDOG369

使用设备 AEC 设置为 true

这个使用小问题,每次当我说话打断的时候,前面几个字不会被录入

可以在后台历史对话里查看音频,分析具体原因。

78 avatar Aug 13 '25 02:08 78

怎么打开Use Device AEC,我在menuconfig中没有这个配置,只有server aec

lxoyj avatar Sep 15 '25 09:09 lxoyj

diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild
index 45adc39..7b98a7a 100644
--- a/main/Kconfig.projbuild
+++ b/main/Kconfig.projbuild
@@ -508,7 +508,7 @@ config USE_AUDIO_PROCESSOR
 config USE_DEVICE_AEC
     bool "Enable Device-Side AEC"
     default n
-        depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE || BOARD_TYPE_LICHUANG_DEV || BOARD_TYPE_ESP32S3_KORVO2_V3 || BOARD_TYPE_ESP32S3_Touch_AMOLED_1_75 || BOARD_TYPE_ESP32S3_Touch_AMOLED_2_06 || BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_4B || BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_XC || BOARD_TYPE_ESP_S3_LCD_EV_Board_2)
+        depends on USE_AUDIO_PROCESSOR && (BOARD_TYPE_ESP_BOX_3 || BOARD_TYPE_ESP_BOX || BOARD_TYPE_ESP_BOX_LITE || BOARD_TYPE_LICHUANG_DEV || BOARD_TYPE_ESP32S3_KORVO2_V3 || BOARD_TYPE_ESP32S3_Touch_AMOLED_1_75 || BOARD_TYPE_ESP32S3_Touch_AMOLED_2_06 || BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_4B || BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_XC || BOARD_TYPE_ESP_S3_LCD_EV_Board_2 || BOARD_TYPE_ECHOEAR)
     help
         因为性能不够,不建议和微信聊天界面风格同时开启
 

这样修改,然后 clean,重新 menuconfig,就能看到 Device AEC 选项

78 avatar Sep 15 '25 09:09 78

@78 我是用的v1.9.2版本,看Kconfig.projbuild已经是上面的调整后的代码了,但是idf.py menuconfig出来的配置界面还是没有Use Device AEC这个选项

Image

sporterman avatar Oct 22 '25 08:10 sporterman

你选择的 BoardType 为 面包板,不支持 Device AEC

78 avatar Oct 22 '25 12:10 78

@78 好的,虾哥, 已经解决了,应该是上面选择的开发板需要在depend on条件里面,目前用的立创s3开发板,有一些问题请教一下: 1 如果开了AEC,周围环境嘈杂一点,很容易就打断了,这个有啥好的解决方案没,调整云端VAD阈值吗?

2 现在新加了一个线程,定时往云端发送图片,发现websocket协议发送23k图片数据需要180ms,加上图片的转换格式和编码,整个发送流程500-600ms, 用mqtt协议比较麻烦,分片发送23k数据,但是耗时快了很多,发送时间28ms,两个协议的差距太大了,无法解释,请问有遇到过类似问题吗, 是mqtt协议占用资源多吗,因为使用mqtt明显感受到afe fetch数据的线程慢了很多,导致buffer溢出,请问如果是我这种情况,建议使用mqtt还是websocket呢?

sporterman avatar Oct 23 '25 03:10 sporterman

  1. 参考这个配置:https://github.com/78/xiaozhi-esp32/issues/1292#issuecomment-3402367406
  2. 如果频率高,首选 websocket,如果频率低,考虑 HTTP。mqtt 适合低频数据包小的场景

78 avatar Oct 24 '25 18:10 78

@78 开启AEC容易被打断的情况是,设备处于speaking状态,本来收到TTS数据准备播放或者正在播放的,收到一点外界语音就马上被打断,切换到聆听状态,如果外界有嘈杂的声音,一直被打断,一直聆听,这种情况有啥好的解决方法吗,对这块的知识不太了解,

sporterman avatar Oct 25 '25 08:10 sporterman

目前针对吵杂环境没有解决办法,可以想象一下把自己关在房子里,外面很多人在说话,有些是在跟你说的,有些不是,但是跟你说的时候不会提及你的名字,只能靠上下文猜测,目前的模型还不具备这方面的能力。

78 avatar Oct 25 '25 13:10 78

@78 好的,理解了,非常感谢虾哥的耐心回复。

sporterman avatar Oct 30 '25 03:10 sporterman

目前针对吵杂环境没有解决办法,可以想象一下把自己关在房子里,外面很多人在说话,有些是在跟你说的,有些不是,但是跟你说的时候不会提及你的名字,只能靠上下文猜测,目前的模型还不具备这方面的能力。

现在有没有办法做到唤醒词打断呢?就是当设备说话的时候,再次说唤醒词打断设备说话

KingingWang avatar Dec 04 '25 15:12 KingingWang

大部分S3芯片的开发板设备都支持,你可以拿面包板来测试唤醒词打断。

78 avatar Dec 05 '25 15:12 78

大部分S3芯片的开发板设备都支持,你可以拿面包板来测试唤醒词打断。

好的,我刚刚看了一下,目前只有afe唤醒词支持在说话的时候被打断

                // Only AFE wake word can be detected in speaking mode
                audio_service_.EnableWakeWordDetection(audio_service_.IsAfeWakeWord());

KingingWang avatar Dec 06 '25 01:12 KingingWang

大部分S3芯片的开发板设备都支持,你可以拿面包板来测试唤醒词打断。

好的,我刚刚看了一下,目前只有afe唤醒词支持在说话的时候被打断

                // Only AFE wake word can be detected in speaking mode
                audio_service_.EnableWakeWordDetection(audio_service_.IsAfeWakeWord());

是的,没有AEC的话,可能需要比较大声才能被mic听到

78 avatar Dec 06 '25 18:12 78

大部分S3芯片的开发板设备都支持,你可以拿面包板来测试唤醒词打断。

好的,我刚刚看了一下,目前只有afe唤醒词支持在说话的时候被打断

                // Only AFE wake word can be detected in speaking mode
                audio_service_.EnableWakeWordDetection(audio_service_.IsAfeWakeWord());

是的,没有AEC的话,可能需要比较大声才能被mic听到

研究了一阵 感觉 AFE 这一套个人开发者还是太难调试了, 麦克风和音箱在一起的情况下, 录到的喇叭声音比人声大好多, 还有震动问题, 而且这种小喇叭再经过外壳震动 声音很可能已经失真 和参考音乐又差了一截. 然后 AEC 和 VAD 协同还是个问题, AEC 不完美的话 VAD 又收影响. 这个个人要调试实在太麻烦了, 软硬件条件都不具备.

市场上的开发板只是简单的集成个麦克风 好一点儿的可能位置啥的参考了乐鑫建议, 我感觉根本没有声学实测. 最好还是乐鑫或者有实力点儿的开发板商, 出一两种形态的单独的麦克风子板, 以及配套的隔音 导音 和安装附件 全面测试 给出全面建议的参数.

cjccjj avatar Dec 08 '25 14:12 cjccjj

项目配置里有一个 audio test server 可以打开 USE_AUDIO_DEBUGGER 的选项可以打开,然后把板子录制的 PCM 音频通过 UDP 发送到本地的电脑上,本地电脑通过启动 scripts/audio_debug_server.py 来采集音频,自动转成 wav 文件,可以用 Audacity 音频软件或者 https://editor.audio 之类的软件打开。

78 avatar Dec 09 '25 01:12 78

项目配置里有一个 audio test server 可以打开 USE_AUDIO_DEBUGGER 的选项可以打开,然后把板子录制的 PCM 音频通过 UDP 发送到本地的电脑上,本地电脑通过启动 scripts/audio_debug_server.py 来采集音频,自动转成 wav 文件,可以用 Audacity 音频软件或者 https://editor.audio 之类的软件打开。

谢谢! 没注意到这个选项, 之前看乐鑫的例程 AEC debugger 存在 SD 卡里 好麻烦....

另外 请教有什么提高调试效率的工具和方法吗? 我想把所有可能修改调试的参数统统写到 nvs 里, 用那个 advanced console 改. 否则一编一遍效率太低了.

cjccjj avatar Dec 09 '25 13:12 cjccjj

你可以启动的时候通过局域网 HTTP 拉取一下参数来配制,要先连接 Wi-Fi

78 avatar Dec 09 '25 14:12 78

项目配置里有一个 audio test server 可以打开 USE_AUDIO_DEBUGGER 的选项可以打开,然后把板子录制的 PCM 音频通过 UDP 发送到本地的电脑上,本地电脑通过启动 scripts/audio_debug_server.py 来采集音频,自动转成 wav 文件,可以用 Audacity 音频软件或者 https://editor.audio 之类的软件打开。

谢谢! 没注意到这个选项, 之前看乐鑫的例程 AEC debugger 存在 SD 卡里 好麻烦....

另外 请教有什么提高调试效率的工具和方法吗? 我想把所有可能修改调试的参数统统写到 nvs 里, 用那个 advanced console 改. 否则一编一遍效率太低了.

Image

我不是很确定 但这个应该一路是mic 一路是playback参考对吧 无论是否打开 AEC 参考应该都在 mic录到的喇叭声音比用户声音大10倍以上 但是用户声音分辨率仍然够用 录到的喇叭声音可能已经有点儿clipping 可以调小一点音量 但mic增益应该不用改 两者也是同步减小 感觉没有什么意义 playback部分和用户声音音量大小类似, 听起来是清楚的, 这个是内部的, 感觉不存在增益的概念吧 有也只是计算用途?

所以我理解 AEC 应该做的大概是 mic_clean = mic - playback*10 或者 mic_clean = mic/10 - playback 我看文档说这个比例是自动调整的 只要录清楚就行 (但是不知道我现在这个情况是否超过了极限) 另外有个 AGC 感觉是后面的事情 其他看起来只有几个类型选择 没提供太多可调整的参数

虽然用户声音和喇叭差10倍 但听起来都是清楚的 AEC应该还是有条件做好吧. 不知道有没有办法录 AEC 之后的声音?

cjccjj avatar Dec 09 '25 16:12 cjccjj

你可以启动的时候通过局域网 HTTP 拉取一下参数来配制,要先连接 Wi-Fi

好 这个更方便

cjccjj avatar Dec 09 '25 16:12 cjccjj