AI脑洞板
完整教案
自学课件
第 24 课 · 共 24/51 课

语音识别 ASR——机器怎样把声音变成文字 机器怎样把声音变成文字

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

1. 先做一件事:看见自己的声音

烧录 demo01_wave_view(这个 demo 不联网、不要密钥)。什么都不说,盯着屏幕看 10 秒——你会发现波形不是一条完美的直线,是一条毛毛的细线。那是电路的"底噪":就算你闭嘴,世界上也没有"绝对的安静数字 0"。

现在对着板子说"今天天气真好",看波形跳起来;再换悄悄话说同一句——波形几乎躺平了。

记住这个对应:声音大 → 数字大 → 波形高;声音小 → 数字小 → 波形矮。 你看见的不是"声音",是一串数字。

任务 1:波形观察表

✏️ 可以直接在表格里填写
场景预测(先写)实测peak 数字
安静 10 秒
正常说一句话
悄悄话说同一句
拍一下手

2. 声音是数字:算一笔账

麦克风每秒测量 16000 次空气振动,每次测量记成一个数字(-32768 ~ 32767)。每个数字占 2 字节。

算一算(写在纸上): 1 秒声音 = 16000 × 2 = 32000 字节 3 秒声音 = ______ 字节? (答案:96000。烧录 demo02 后,看屏幕上"声音 B"那个数字,和你说的秒数对得上吗?)

demo01 屏幕下方的 peak: 12345 / 32767 就是当前这一瞬间声音数字的大小。波形,只是把这些数字画出来而已。


3. 三步,声音变文字

烧录 demo02_speech_to_text(这次需要 WiFi 和密钥)。点一下屏幕,说"今天天气真好",再点一下。屏幕底部会报告三个数字:录音毫秒 / 声音字节 / 识别毫秒——它们是理解全过程的证据。

声音变文字的三步:采样、上传、云端猜字

步骤谁在做在哪里干什么
1 采样板子板子上声音 → 数字,存进 pcmBuffer
2 上传板子 + WiFi路上数字装进"信封"(base64),寄给百度
3 比对百度云端和学过的千万条声音比对,猜出最像的字

注意:全程没有人"听懂"中文。云端做的是一场大规模的猜——猜就有猜错的时候,这正是下一节的主题。


4. 信封是什么:base64(浅讲)

你的声音数字是"裸数据",像一沓手写草稿。直接扔进邮筒?邮局不收——邮局对信封里能装什么有规定。base64 就是把草稿重新誊写一遍,誊成邮局认识的标准字符,再装信寄出。

base64 信封比喻:重新誊写再寄出,不是加密

所以串口日志里有个奇怪的现象:96000 字节的声音,寄出去变成了 128000 个字符——信封让东西变大了(大约 4/3 倍)。

⚠️ 比喻的边界:base64 不是加密!它只是换一种写法,谁都能"拆开"还原。它管"能不能寄",不管"能不能被看懂"。千万别把它当密码。


5. 动手做实验:故意让它听错

本课主实验。还是"今天天气真好",换五种说法,把识别结果抄进表里:

✏️ 可以直接在表格里填写
说法预测(会全对吗)实测识别结果对了几成
正常速度、靠近说
说得飞快
一个字一个字拖长
嘈杂环境(同学大声聊天)
悄悄话(贴着麦克风口)

识别为什么会错:四种影响因素

情况为什么错
噪声大别人的声音和你的混进同一个信封,云端分不清哪段是你
说太快字挤在一起,边界模糊
声音太小回看 demo01:小声时波形贴着中线——数字太弱,特征不够
同音字"十四"和"四十"的声音数字长得很像,云端猜了另一个

结论:识别 = 猜测。想猜得准,就把信号变清楚:说慢点、大声点、离近点、环境安静点。


6. 不联网也能听懂:本地识别

刚才的"猜字"住在百度云端——声音要打包寄出去。可不可以让"猜"就发生在板子自己身上?可以。烧录 demo04_offline_asr(不联网、不要密钥),等屏幕出现"唤醒词:你好小智",对着板子说:

"你好小智" → 屏幕显示"已唤醒",再对着说 "打开灯"

看!板载 RGB 灯亮了,屏幕变亮、出现一盏灯泡。说"关闭灯"——灯灭、屏幕变暗。说"播放音乐"——扬声器真的唱起《小星星》。

本地识别 vs 云端识别

同样在"猜字",但这次模型(一沓"声音→字"的对照表,约 3MB)直接住在板子芯片里。声音变成数字后,不用寄出去,芯片当场猜。

本地 vs 云端,怎么选?

比一比本地(demo04)云端(demo02/03)
联网不用必须 WiFi
密钥不要要
能认什么固定命令词(唤醒词 + 预设拼音)任意句子,大词库
谁在猜板子芯片(3MB 小模型)百度服务器(千万条声音)
快慢毫秒级,当场答要上传 + 排队
隐私声音不出板子声音寄到外网
换服务/加新词换模型重烧改配置/换厂商即可

一句话记:本地像自家小狗——快、听话、认得主人几个口令,但听不懂别的;云端像打电话问专家——什么都会,但要联网、要付费/密钥,还得把问题说给对方听。

💡 试着对本地版说一句没登记过的话(比如"帮我把灯调成紫色")——它没反应。不是坏了,是"小狗没学过这个口令"。而云端版能接住。选谁,取决于你要快和私密,还是要大而全。


7. 想自己看懂一点点代码:两个名字就够

打开 demo02_speech_to_text.ino(或问 AI 帮手),只看两个名字:

  • pcmBuffer:声音数字的家。你说那几秒被变成一串数字,就住在这个"仓库"里——3 秒住 96000 个字节。demo01 画的波形,就是把这个仓库里的数字一个个画出来。波形和数字,是同一个东西的两张脸。
  • speechToText:寄出去换文字的那一棒。装信封 → WiFi 寄给百度 → 等回信 → 拆出文字。

中文伪代码(不用背):

点一下屏幕:开始往 pcmBuffer 里存数字(每秒 16000 个)
再点一下:pcmBytes 里攒了 N 个字节
调 speechToText():
    N 不够 32000(1 秒)?报错,云端不收短于一秒的信
    把 N 个字节装进 base64 信封,寄给百度
    等回信,拆出文字,画到屏幕

💡 想把这条链子用起来?烧 demo03_voice_notes:连续识别多条,最新便签插在最上面,最多 5 条。试试录一张"今日作业清单"。便签存在内存里,断电就丢——想不丢?把识别结果写进 TF 卡(第 10/14 课学过),这就是创意方向表的第一行。

打开 demo04_offline_asr.ino,找 sr_commands[]——本地版的"口令登记表"。你会发现命令不是汉字,而是拼音(da kai deng / guan bi deng):本地小模型的声学词表按拼音音节组织,所以口令要"翻译"成拼音写进去。想加一条新口令?在这里登记就行(还要确认模型词表里有对应音节)。


8. 自检小测(点开对答案)

1. 3 秒的声音等于多少字节?怎么算的?96000 字节。每秒采样 16000 个数字 × 每个 2 字节 × 3 秒。
2. 声音变文字的三步里,哪几步在板子上?第 1 步采样(板子)和第 2 步装信封(板子上完成打包)。上传要路过 WiFi,比对猜字在百度云端。
3. base64 是加密吗?不是。它只是把数据"重新誊写"成网络传输认识的标准字符,谁都能还原。它管"能不能寄",不管"能不能被看懂"。
4. 为什么嘈杂环境容易识别错?别人的声音和你的声音混在同一份数据里寄给了云端,云端分不清哪段是你说的话。
5. pcmBuffer 和 speechToText 各管什么?pcmBuffer = 声音数字的家(存 PCM 数据);speechToText = 把数字装信封寄给百度、换文字回来的那一棒。
6. 说半秒就点停,会发生什么?为什么?屏幕报"说得太短了,至少一秒"。因为云端规定短于一秒(32000 字节)的样本不收,板子在寄信前替云端把关(MIN_RECORD_BYTES)。
7. 本地识别(demo04)和云端识别最大的不同是什么?模型住的地方不同:本地把约 3MB 的"声音→字"模型放进板子芯片,不联网、当场猜、只认固定命令词;云端把声音寄给百度,用千万条声音的大模型猜,任意句子都能接,但要联网和密钥。
8. 对本地版说一句没登记过的话,它没反应。是坏了吗?不是坏了。本地模型的词表里没有这句话的音节/口令,相当于"自家小狗没学过这个口令"。换云端版就能接住——这正是本地和云端的取舍:要快和私密,还是要大而全。

9. 挑战任务

  1. 字节侦探:用 demo02 分别说 1 秒、2 秒、3 秒的话,把屏幕上"声音 B"三个数字记下来——它们是不是差不多 32000 / 64000 / 96000?
  2. 错误收藏家:故意收集 3 条识别错误的结果,判断每条属于"四种情况"里的哪一种(噪声/太快/太小/同音字),写在错误旁边。
  3. 断网实验:拔掉 WiFi(或关掉路由器),分别对 demo02(云端)和 demo04(本地)说"打开灯"。哪个还认你?为什么?
  4. 口令设计师:给 demo04 设计一条新口令(比如"播放儿歌"→ bo fang er ge),想想要不要登记进 sr_commands[],本地和云端各要改哪里?
  5. 便签作品:用 demo03 录 5 条"今日提醒",然后想一个办法让它们断电也不丢(提示:第 10 课 TF 卡),把思路写给 AI 帮手看。
第 24 课 · 看得见的声音

第 24 课 · 看得见的声音

不联网、不识别,把麦克风采到的声音数字直接画成跳动的波形。

24声音波形麦克风
第 24 课 · 语音转文字

第 24 课 · 语音转文字

点屏幕开始录音,再点一下停止,板子把你说的话寄到百度云端听写成文字。

24语音识别STT云端
第 24 课 · 语音便签

第 24 课 · 语音便签

连着说几条话,每条都自动变成文字,最新的一条插在便签列表最上面。

24语音识别便签列表
第 24 课 · 不联网也能听懂

第 24 课 · 不联网也能听懂

完全离线的语音识别:喊一句「你好小智」唤醒,再说命令就能开关灯、放音乐。

24离线识别唤醒词ESP-SR