面向 3–6 岁儿童的「幼小衔接全科启蒙」微信小程序。四大主学科:拼音 / 加减法 / 英语 / 古诗。
主打:无广告 · 无内购 · 离线可用 · 数据仅存本机。
- 当前版本:
v1.0.0 - 发布备注:萌芽学前首发完整版本:拼音、加减法、英语、古诗启蒙,支持离线语音、护眼提醒、多宝贝进度、家长看板与儿童友好交互。
- 用 微信开发者工具 导入本项目目录。
- AppID:
wxf10d01c1af4498e1(或替换为你自己的测试号)。 - 点击「编译」即可在模拟器运行;点「预览」扫码在真机体验。
- 语音朗读为内置离线音频,无需任何配置即可使用(见下文「语音朗读」章节)。
app.js 入口:全局状态 + 跨页面护眼计时器(每秒 tick)
app.json 页面注册、窗口样式
app.wxss 全局样式(CSS 变量设计系统)
components/eye-rest 护眼倒计时弹窗组件(20 秒)
pages/
home/ 首页:四学科卡片(掌握率环)+ 今日时长 + 星星
pinyin/ 拼音:声母/韵母/整体认读/拼读测验
math/ 加减法:6 关闯关(10/20 以内,每关答对 5 题通关)
english/ 英语分类入口
englishWords/ 单词学习 + 配对小游戏
poems/ poemDetail/ 古诗列表 / 详情(逐句跟读 + 填空)
parent/ 家长看板:掌握率 + 薄弱项 + 学习报告 + 重置
settings/ 设置:护眼时长 / 声音 / 宝贝管理 / 数据导出
children/ 切换 / 新增宝贝
utils/
store.js 单一数据源(多宝贝 / 进度 / 设置,纯本地存储)
data.js 静态内容库(拼音 / 数学关卡 / 英语词汇 / 古诗)
speak.js 语音朗读(内置离线音频,文本→音频映射播放)
util.js 随机工具(shuffle / pick / ri)
assets/audio/ 离线音频包(229 条 m4a,约 1.6MB,16kbps 压缩适配主包 2MB 限制)
pinyin/english/poems/math/feedback 按学科分目录
utils/audio-map.js 音频清单(key → 文件路径,微信运行时可 require 的 JS 模块)
scripts/
gen-audio.js 音频生成脚本(edge-tts,按需重生成)
convert-audio.js 音频转码脚本(mp3→16k m4a,缩小主包体积)
所有数据存于 wx.getStorageSync('mengya_app_v1'),结构:
{
children: [{
id, name, avatar, stars, totalSeconds,
today: { date, seconds },
progress: {
pinyin: { learned: { "声母:b": true, ... } },
math: { solved, correct, streak, weak, levelCorrect, cleared },
english: { learned: { "color:red": true, ... } },
poems: { learned: { "yongE": true, ... } }
}
}],
current: <childId>,
settings: { dailyLimitMin: 25, sessionMin: 20, sound: true }
}math.cleared:已通关关卡 id 集合;math.levelCorrect:每关累计答对数(满 5 通关)。math.weak:错题 key 集合(如"3+2"),家长看板展示。
- 护眼计时:
app.js全局 ticker 每秒轮询。当处于学习页(pinyin/math/english/englishWords/poems/poemDetail)且未休息/未封顶时,累加今日时长。到「单次时长」弹eye-rest休息窗(20 秒);到「每日上限」弹封顶提示回首页。 - 多宝贝:每个宝贝独立进度与星星;
parent/settings/children三入口均可管理。 - 激励:学会/答对得星星;数学连答对 5 题通关;古诗填空、英语配对等小游戏。
utils/speak.js 播放预生成的离线音频包,受设置项「声音」开关控制。链路:speak(text) → 文本映射 → 音频文件 → InnerAudioContext 播放。
个人主体小程序无法使用微信同传插件,云开发方案又需联网+计费,故采用预生成离线音频:纯离线、零运行成本、真机即时生效。共 229 条 m4a 音频(约 1.6MB,16kbps 压缩以适配主包 2MB 限制),置于主包
assets/audio/,用相对路径访问。音色为微软 Azure 神经网络音色(edge-tts 生成),中文自然度远超系统 TTS。
| 类型 | 条数 | 来源 |
|---|---|---|
| 拼音字母/音节 | 63 | 声母 23 + 单韵母 6 + 复韵母 9 + 鼻韵母 9 + 整体认读 16 |
| 拼读例字 | 34 | 声母+韵母拼出的汉字(八/妈/哥…) |
| 英语单词 | 50 | 6 大分类词汇 |
| 古诗整首 | 10 | 每首完整朗读 |
| 古诗逐句 | 40 | 逐句跟读 |
| 数学数字 0-20 | 21 | 中文读法(10→「十」、20→「二十」),备用 |
| 数学运算词 | 5 | 加/减/等于/等于几/再算算(备用) |
| 通用反馈词 | 6 | 答对啦/不对再算算/正确/再试试/学会啦/再想想 |
数学算式不朗读(避免预生成数百条算式音频膨胀包体),仅保留答对/答错反馈音。数字朗读用中文读法,避免「10」被念成「一零」。
音频由 scripts/gen-audio.js 用 edge-tts(微软 Azure 神经网络 TTS)生成,音色 zh-CN-XiaoxiaoNeural(晓晓)/ en-US-AriaNeural,语速 -10%。生成时联网(调微软服务,无需密钥),生成完打包进小程序后运行时纯离线。如需调整音色/语速或新增内容:
# 前置:安装 edge-tts(联网调用微软 TTS,无需密钥)
pip3 install --user edge-tts
# 1. 生成音频(edge-tts 输出 48kbps mp3,已存在且非空的跳过;0字节或缺失的自动重试3次)
node scripts/gen-audio.js
# 2. 转码压缩(mp3→16kbps m4a,缩小体积以适配主包 2MB 限制;同步更新 audio-map.js)
node scripts/convert-audio.js
# 修改 gen-audio.js 里的 ZH_VOICE / EN_VOICE / RATE 后重跑可换音色或语速
# 拼音字母用带调拼音符号朗读(见 scripts/pinyin-read.js),统一一声平调适合儿童启蒙注意:生成时需联网。
ü单字母 edge-tts 偶发超时,脚本用同音字「迂」兜底。可选音色见edge-tts --list-voices。
npm install # 安装开发依赖(eslint)
npm test # 运行 store.js 单元测试(Node 18+ 内置 node:test)
npm run lint # 静态检查- 测试:
tests/store.test.js,用内存桩替换wx.*Storage,无需小程序环境。 - Lint:
.eslintrc.json,轻量规则聚焦真实 bug(未定义、重复声明、不可达代码等)。
- 纯离线、无后端;数据仅存本机,换设备/清缓存会丢失(
settings页可导出 JSON 备份)。 - 语音朗读为预生成离线音频,仅覆盖
data.js中的固定内容;动态文本(如未来新增的内容)无音频时会静默,需重跑scripts/gen-audio.js并执行scripts/convert-audio.js补齐。 - 音色为微软 Azure 神经网络音色(edge-tts 生成),生成时需联网;小程序运行时完全离线。
- 音频约 1.6MB 置于主包,16kbps 压缩以适配主包 2MB 限制;音质略有损失但人声清晰可懂。
本项目基于 MIT License 开源,可自由使用、修改与分发。欢迎 Fork 与二次开发。




