前言

之前我们把小智固件烧进了ESP32-S3,配网、唤醒、联网、台湾腔TTS一路跑通,孩子的睡前故事也讲上了。到这儿,一个能用的盒子算是成了。

但回看整段旅程,有一条弯路我踩得最深、也最值得单写一篇:就是"声音到底怎么进出这块板子"。我一开始想走USB声卡(UAC)的捷径,结果撞了面墙,最后才回到ESP32-S3直连I2S麦克风+功放的正道「其实是mic和喇叭下单到货之前的路径验证」。这篇把这段弯路讲透,给后来人省几天。

老规矩:每篇聚焦一个难点,贴关键现象,确保你照着能避坑。前置篇是系列之一(环境)、之二(接线)、之三(烧录锁OTA)。


在这里插入图片描述

一、起点:板子插上Mac,它变成了一块"声卡"

板子用USB连上Mac,系统里冒出一个USB Device UAC音频设备。我第一反应是:这不就是块现成声卡吗?直接让Mac当中间层——板子当USB麦克风/音箱,省掉专门买麦、买功放,甚至还能顺手在Mac上跑ASR/TTS,板子只管采和放。

当时想得挺美:UAC既然是USB音频类,那把它选成Mac的输入/输出设备,语音链路不就全自动了?

二、撞墙:UAC"只能录Mac输出,录不了我的声音"

在Mac的声音设置里把板子选成输入设备,开始测录音。转折来得很快:我后台放了一段音乐,录音成功了;可我对着板子说话,却怎么也录不到。

那一刻我明白了——这块板子作为UAC设备时,它"听"到的其实是Mac声卡的回环输出,不是真实麦克风。换句话说,UAC从根上就采集不到人的语音。它压根不是一块"带麦的声卡",只是个USB音频端点,能做回环演示,干不了"听人说话"的活。

这对做对话盒子是致命的:孩子对着盒子喊"讲个故事",盒子根本听不见。UAC这条路,到此判死刑。

三、转弯:放弃UAC,让ESP32-S3自己接麦和功放

想通UAC采集不到语音,路就清楚了:让ESP32-S3通过I2S总线直接接一颗数字麦克风(INMP441)和一片I2S功放(MAX98357A),喇叭用带端子的8Ω3W。这样声音的进出全在板子上,不依赖任何电脑声卡,盒子的"耳朵"和"嘴"都是自己的。

引脚怎么对、固件怎么烧,前面两篇写过:之二讲了供电和SCK落在GPIO8的坑,之三讲了烧录和锁OTA。这里只补一句——UAC折腾的那些功夫,不如一开始就走I2S直连,省下的时间够把固件烧三遍。

四、为什么直连I2S最终胜出

维度UAC声卡方案ESP32直连I2S
语音采集只能回环Mac输出,录不到人声板子真接麦,录得到人声
是否依赖电脑必须连Mac完全独立,通电即用
远场/移动绑在电脑旁拿在手里、放床头都行
适合做盒子否是

一句话:对话盒子要"随时能听人说话",必须板子自己有麦;UAC把"麦"的活丢给了一个不存在的东西,注定走不通。

五、给后来人的避坑清单

  1. 板子插上Mac变声卡是正常的,但那不是你要的"麦",别拿它当捷径。
  2. 真要做语音盒子,直接I2S接INMP441+MAX98357A+8Ω3W喇叭,别绕UAC。
  3. UAC的"能录到音乐"是假象,验证语音链路必须"对着板子说话"测,不能只放后台音乐。

六、下一步与系列预告

到这篇,音频链路这块最深的弯路讲完了。它和之二(接线)、之三(烧录)拼起来,就是"板子怎么自己听、自己说"的完整答案。

下一篇我打算先补一篇亲历——给孩子讲睡前故事的真实验证(盒子第一次真正派上用场的那一轮),把"能跑"变成"真好用"。自托管服务器那篇,等我用家里的电脑Ollama真正跑通之后,再以亲历方式写,不抢跑。
*

下一篇:《系列之五:真实验证——给孩子讲睡前故事,盒子第一次派上用场》

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐