自学读本:跟着读、照着做,卡住就问 AI
你好,我是吴老师。
这份是给你自己读的——不用等我讲,你一段一段往下看,看到让你停下来的地方,就照着做一遍。看不懂的整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。
读完之后,你应该能:说清麦克风和扬声器在"声↔电"上是反过来的;解释 ADC 怎么把声音变成数字;说出回声程序在搬什么;用一个数表示"这一段声音有多大"。
用时:60–90 分钟。准备:板子、数据线、已经接入板卡 Skill 的 WorkBuddy。
一、上一课的反向操作
上一课我们让板子开口:你会生成数字、送出去,扬声器就响。
这一课把它整个倒过来:让板子听见。
先做最直观的实验:对板子说一句话,它一字不差地重复给你听。这个实验叫回声(echo),就像对着山谷喊话。
动手之前先想一个反直觉的问题:说话是空气振动撞到耳朵,可板子没有耳朵,它只有数字。你说的话到了板子里,会变成什么?
——变成一堆数字。
那它是怎么把"空气振动"变成数字的?往下看。
二、先做回声实验
请使用课程的 esp32s3-touchboard-hardware-dev Skill,做一个"回声"程序:
板子从麦克风连续采声音,把采到的声音立刻从扬声器放出来,
就像对着山谷喊话一样。初始化音频时复用本课例程里 ES8311 + I2S 的初始化方式。
屏幕显示"回声中,说句话试试"。帮我新建程序并烧录。
对着它说句话。你听到的自己的声音和平常不一样吧?
| 现象 | 勾选 |
|---|---|
| 声音发闷、变扁 | |
| 有呲啦杂音 | |
| 尖叫(啸叫) |
大部分人听到的自己的录音都"不像自己"。因为平时你说话,声音既从空气传到耳朵,也从骨头直接传到脑袋;录音只剩空气这一路。找同桌听,他们反而觉得像你。
三、麦克风:一面反过来工作的"鼓"
上一课扬声器是"电动的鼓":电压变 → 纸盆动 → 空气推。
麦克风刚好反过来:空气推 → 纸盆动 → 产生微弱电压。
| 扬声器 | 麦克风 | |
|---|---|---|
| 谁先动 | 电压先动,纸盆跟着动 | 纸盆先动,电压跟着产生 |
| 能量方向 | 电 → 声 | 声 → 电 |
⚠️ 比喻有边界:现在手机里那种小话筒(MEMS)没有看得见的"纸盆",但"声 → 电"的方向不变。
麦克风给出的电压又小又连续,可板子只会处理数字。怎么进去?——靠 ADC。
四、ADC:给电压"拍照"
第 11 课的 DAC 把数字变电压;这一课的 ADC 反过来:电压变数字。
ADC 的干活方式就是拍照:
每隔一小段固定时间,看一眼电压多大,记成一个数字。看一眼记一个,再看一眼再记一个。
- 每秒"拍"多少次 = 采样率(上次是"送"的节奏,这次是"拍"的节奏)
- 每个数字分多细 = 位深。我们用 16 位:把电压分成 65536 格,每格一个数字
整条录音链:
空气振动 → 麦克风 → 微弱电压 → ADC 按节奏拍照成数字 → 数字存起来
五、声波的样子:上上下下的一串数
你的话变成一长串数字,画出来是波浪状:
- 起伏多快 = 频率 → 音调
- 起伏多高 = 振幅 → 响度(音量)
- 起伏什么形状 = 波形 → 音色
音量在程序里 = 这些数字离开中间 0 有多远。 数字都贴着 0 → 安静;数字冲很高 → 响。
六、回声在搬什么
回声程序的中文伪代码:
不断重复:
从麦克风读一串数字
把这一串数字原样送出去
读进来什么样,送出去就什么样——板子并不"理解"你的话,它只是忠实地把数字搬了个家。让板子听懂话(语音识别),是以后联网课程的事。
七、让屏幕看见声音:音量柱
怎么用一个数代表"这段声音多大"?
简单办法:把 0.1 秒内所有采样(1600 个)的绝对值加起来除以个数 → 平均音量。
请做一个"音量指示器":
麦克风每 0.1 秒算一次平均音量,
屏幕左边画一根柱子,音量越大柱子越高(超过安全值变红),
上面实时显示音量数值。柱子要平滑变化,不要乱跳。
然后测三个场景:
| 场景 | 我预测 | 实际 |
|---|---|---|
| 安静 | ||
| 正常说话 | ||
| 喊 |
"响"在程序里不是感觉,是数字。 安静时几十,说话时几百上千,喊叫更高。
八、啸叫是什么
板子靠近扬声器,可能听到刺耳尖叫——啸叫。
声音链:扬声器放出 → 麦克风收进 → 放大 → 再放出……绕圈变大,变成尖叫。
| 我做的操作 | 看到/听到 |
|---|---|
| 板子靠近喇叭 | |
| 移开 |
这不是故障,是"回声变成循环"。电话会议、演唱会都怕它。你能想一个简单的压制办法吗?(提示:声音已经很大时,别急着放大。)
九、没声音排查
| 现象 | 先检查 |
|---|---|
| 回声没声音 | 串口报初始化失败了吗?麦克风方向对吗? |
| 声音很轻 | 调大音量 |
| 全是嘶嘶底噪 | 去安静环境;看缓冲大小 |
| 一冲一冲 | 读和放是不是互相堵死了 |
十、过关检查
不看 AI,自己说:
- 麦克风和扬声器在声↔电方向上的关系?
- ADC 干什么?和 DAC 什么关系?
- 采样率、位深各决定什么?用"拍照"怎么解释?
- 回声程序在搬什么?板子理解你说的话吗?
- 音量在程序里是什么?怎么算?
- 啸叫哪来的?
十一、还能玩什么
| 方向 | 想法 |
|---|---|
| 噪音报警器 | 音量超阈值屏幕变红 + 灯亮 |
| 拍手开关灯 | 拍一下亮、再拍灭(要区分一次和两次) |
| 吹气游戏 | 吹气让屏幕上的球飞起来 |
| 神秘低语 | 回声 + 上一课变调,变机器人音 |
想做"板子听得懂人话"?那叫语音识别,等学了网络再回来。今天先把"收数字"练熟——下一课我们要打开盖子,看这些数字是怎么在两根线之间跑起来的。