AI 编程课
完整教案
自学课件
15 课 · 共 15/48

声音留言机 ——录下来,存进卡里,再放出来

课时
待定
器材
ESP32-S3 触摸屏板 + USB 线
前置知识
配套代码
见项目 demo 目录

自学读本:跟着读、照着做,卡住就问 AI

你好,我是吴老师。

这份是给你自己读的——不用等我讲,你一段一段往下看,看到让你停下来的地方,就照着做一遍。看不懂的整段复制给 AI,加一句"请一次只解释一个概念,讲完问我一个小问题"。

读完之后,你应该能:说清"存声音"和"存计数器"是同一件事;解释 WAV 文件头(自述信)里有什么;把录音的字节数算出来;说出播放 WAV 时怎么跳过文件头。

用时:90 分钟。准备:板子、MicroSD 卡(已格式化)、数据线、已经接入板卡 Skill 的 WorkBuddy。


一、三件会的东西,拼成一件新的

你已经有三个"半成品":

  1. 第 12 课:对着板子说话,麦克风把它变成数字(回声)
  2. 第 14 课:把数字写进 SD 卡,重启还在
  3. 第 11 课:把数字送出去,扬声器就响

回声是"边收边放",停机就没了。但如果把收进来的数字像计数器一样写进 SD 卡呢?

那样你说的话就留下来了——这就是声音留言机

二、存声音 = 存数字

录音在板子里是一大串数字:一秒 16000 个,每个 2 字节。

所以"存声音"和存 count.txt 是同一件事:把数字一个接一个写进文件

但文件里只有一串数字,别人怎么知道它是声音、每秒几个、多大、几个声道?

需要"自我介绍"——这就是文件头。

三、WAV:声音文件的"自述信"

我们用的格式叫 WAV

┌──────────────────────────────┐
│ 文件头(前 44 字节 = 自述信)      │
│  · 我是 WAV/RIFF               │
│  · 采样率:16000               │
│  · 位深:16                    │
│  · 声道:2                     │
│  · 数据多长                     │
├──────────────────────────────┤
│ 声音数据(一串 16 位数字)         │
└──────────────────────────────┘

播放器拿到 WAV,先读 44 字节"自述信",就全明白了。参数改了头就要改,否则按错的节奏读。

四、录音存盘的套路

准备:PSRAM 申请大内存;打开 record.wav;先留出 44 字节头

录音(按 BOOT):从麦克风读数字攒进内存,屏显秒数;录够停

写文件:把内存数字写在头后面;回头填上"数据多长";close()

工程细节:数据长度要录完才知道,所以头先空着,写完回头填。

五、播放 = 拆包

打开 record.wav
读 44 字节自述信
跳过文件头,从数据开始:读一小段 → 送出去 → 再读 → 再送
到结尾关闭

和回声的区别只有一处:回声送"麦克风收来的数字",播放送"文件里读出来的数字"。

六、先想好三个"多久"

  1. 录多久? 3 秒 ≈ 16000×3×2×2 ≈ 192KB → 内存够吗?要 PSRAM
  2. 存几个文件? 覆盖旧的,还是 note_1、note_2 一直加?
  3. 何时算录完? 到秒数自动停,还是再按一次?

没有标准答案,但决定"这台留言机怎么用"。这就是设计取舍,真正的作品从这开始。

七、故障排查

现象先检查
录完没声音WAV 头写对了吗?字节数填对了吗?
声音变尖变快播放采样率和头里写的一致吗?
断断续续一次读太少了,缓冲大一点
电脑打不开文件44 字节头写错了

八、过关检查

  1. 为什么存声音和存计数器是同一件事?
  2. WAV 头写哪几样?像什么?
  3. 3 秒录音约多少字节?为什么用 PSRAM?
  4. 播放怎么知道从哪开始是声音数据?
  5. 数据长度先不知道,怎么解决?
  6. 录音存文件和回声最大区别?

九、还能玩什么

  • 多条留言(序号文件、来回切换)
  • 变声留言机(播放时隔一取一)
  • 会说话的相册(照片配录音)
  • 语音小抄(录英语循环播)

下一课反着来:不录只放,放卡里现成的 MP3——第 16 课,本章收尾。

本节配套资源 · 在线烧录

查看全部固件 →

下列演示程序已编译为可烧录固件。把你的 ESP32-S3 触摸屏板 用 USB 接上电脑(需 Chrome / Edge 浏览器),点「在线烧录」即可直接写入,无需安装任何软件。

第 15 课 · 录 3 秒存成 WAV
可烧录

按 BOOT 录 3 秒存进 SD 卡 rec.wav,拔卡插电脑就能播。PSRAM 192KB 缓冲 + 手工写 44 字节 WAV 头。

15 声音留言机
第 15 课 · 播放板子录的 WAV
可烧录

开机播放 SD 卡里的 rec.wav(需先跑 demo01)。跳过 44 字节头,读一段送一段给扬声器。

15 声音留言机
第 15 课 · 完整留言机
可烧录

按 BOOT 轮转:录 3 秒存卡 → 播放 → 再录。录音 + 写文件 + 播放用状态机串成完整作品。

15 声音留言机