《搭建小智AI对话盒子》系列之四:音频链路的弯路——UAC声卡“只能录Mac输出“
前言
之前我们把小智固件烧进了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把"麦"的活丢给了一个不存在的东西,注定走不通。
五、给后来人的避坑清单
- 板子插上Mac变声卡是正常的,但那不是你要的"麦",别拿它当捷径。
- 真要做语音盒子,直接I2S接INMP441+MAX98357A+8Ω3W喇叭,别绕UAC。
- UAC的"能录到音乐"是假象,验证语音链路必须"对着板子说话"测,不能只放后台音乐。
六、下一步与系列预告
到这篇,音频链路这块最深的弯路讲完了。它和之二(接线)、之三(烧录)拼起来,就是"板子怎么自己听、自己说"的完整答案。
下一篇我打算先补一篇亲历——给孩子讲睡前故事的真实验证(盒子第一次真正派上用场的那一轮),把"能跑"变成"真好用"。自托管服务器那篇,等我用家里的电脑Ollama真正跑通之后,再以亲历方式写,不抢跑。
*
下一篇:《系列之五:真实验证——给孩子讲睡前故事,盒子第一次派上用场》
更多推荐




所有评论(0)