e42e2202b1f5b810317a9df82cc2cc75258903b0
- 识别:按题动态 grammar(前缀锁定因数)、只输出中文数字、发音兼容别名(n/l 不分、四十↔十四混淆重录) - 新增双人抢答:键盘/蓝牙手柄绑定抢答、A 秒硬截止扣分、实时计分与冠军结算,支持顺序/随机出题 - 全局口诀范围设置(几开头~几开头,localStorage 持久化) - 修复退出比赛残留定时器弹结果卡的 bug(epoch 代际守卫);计时条改 rAF 逐帧驱动 - 新增 eval.js 端到端识别回归评测(135 例 100%) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🦉 乘法口诀大闯关
小学生乘法口诀语音背诵小程序:自动读题 → 小朋友开口说答案 → 离线语音识别判分,全程免手。 支持顺序闯关 / 随机挑战(错题动态加权,练熟自动减少),限时作答、正/负反馈动效音效。
语音识别用 whisper.cpp 本地离线模型,不联网、不花钱、不上传任何数据到云端。
一、迁移到新电脑需要的文件
calx/
├── index.html # 前端(单页面)
├── server.js # 后端(零 npm 依赖,纯 Node)
├── start.sh # 一键启动
├── gen-cert.sh # 生成自签名 HTTPS 证书
├── models/
│ ├── ggml-small.bin # 中文识别模型(默认,较准,465MB)
│ └── ggml-base.bin # 备用模型(较快,141MB)
└── certs/ # HTTPS 证书(换电脑/换 IP 后重新生成)
certs/ 和 node_modules 不用拷(没有 node_modules)。models/ 必须一起拷,或到新机器重新下载(见下)。
二、新电脑需要的运行环境
# 1) Node.js(v16+ 即可,本项目用 v22 验证)
node -v
# 2) 系统命令:ffmpeg(转码)+ whisper-cli(识别)
brew install ffmpeg whisper-cpp
# 3) 模型(若没一起拷贝 models/)
mkdir -p models && cd models
curl -L -o ggml-small.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
curl -L -o ggml-base.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin
cd ..
三、启动
bash start.sh
# 或: node server.js
启动后终端会打印:
HTTP : http://localhost:8000 http://<你的IP>:8000
HTTPS: https://<你的IP>:8443
- 电脑本机浏览器(Chrome/Edge/Safari):直接开
http://localhost:8000,麦克风可用。 - iPhone / iPad:必须用 HTTPS,见下一节。
四、iPhone / iPad 用语音(一次性设置)
iOS 只有在「HTTPS + 受信任证书」下才允许网页用麦克风。步骤(用 Safari):
- 手机和电脑连同一 Wi-Fi(或你自己的远程方式能到
8443端口)。 - Safari 打开
https://<电脑IP>:8443/cert→ 提示下载描述文件 → 允许。 - 设置 → 通用 → VPN 与设备管理 → 安装刚下载的
calx-local描述文件。 - 设置 → 通用 → 关于本机 → 证书信任设置 → 打开对
calx-local的完全信任。 - Safari 打开
https://<电脑IP>:8443/→ 点“开始” → 允许麦克风 → 之后听题、答题全程免手。
换电脑或电脑 IP 变了:重新
bash gen-cert.sh生成证书,手机重做第 2~4 步。
五、参数配置
- 前端:
index.html顶部CONFIG(读题开关、限时秒数、随机题数、错题加权、静音检测灵敏度等),或首页「⚙️ 家长设置」里直接改常用项。 - 后端模型:默认
ggml-small.bin。想更快可切 base:WHISPER_MODEL=models/ggml-base.bin node server.js - 端口:
PORT=8000 HTTPS_PORT=8443(环境变量可改)。
六、常见问题
- 点“开始”没弹麦克风授权:多半不是 HTTPS 或证书没「完全信任」→ 重做第四节。
- 识别不准 / 没反应:确认终端有
[stt] ... -> "xxx"日志;模型加载✅;小朋友吐字清楚、环境别太吵。 - iOS 上没声音读题:iOS 要求首次交互才解锁语音,点过“开始”后即正常。
- 完全不想用语音:点游戏里「⌨️ 用手写」,或环境不支持时会自动切数字键盘。
Description
Languages
HTML
80.7%
JavaScript
17.3%
Shell
2%