一、内容架构
| 页面 | URL | 说明 |
|---|---|---|
| 自学方案 | /study/english/ | 主入口,含词卡索引表、学习方法 |
| 分批词卡 | /study/english/wordsN/ | N=1~10,每批 10 词 |
| 总词表 | /study/english/all/ | 100 词一览(JS 动态生成) |
| 闪卡自测 | /study/english/quiz/ | 点卡片翻面自测 |
| 共享词库 | /study/english/words-data.js | 词条数据,all/quiz 共用 |
闭环:方案 → 分批词卡(发音+拆解)→ 总词表 → 自测。
二、词卡设计规范
每词卡包含:词性徽章 + 音标 + 词义(点击发音)、语法用法、考点(黄框)、技巧(绿框)、3 个例句(简单/中等/复杂,每句配语法拆解)。
- 例句颜色:🟢简单 / 🟡中等 / 🔴复杂
- 每批配套 2 个语法专题,共 19 个专题
- 选词:高中必修一~三新词,非初中基础动词
三、音频合成(核心)
用 edge-tts(微软免费神经语音)预生成 mp3,无需 API Key。
import edge_tts, asyncio
async def gen(text, path):
await edge_tts.Communicate(text, "en-US-AriaNeural").save(path)
asyncio.run(gen("achieve", "w01.mp3"))
- 语音:
en-US-AriaNeural - 命名:
w01.mp3=词,w01-s1.mp3=例句1 - 每批 40 个 mp3,全站 400 个
为什么不用浏览器合成?浏览器
speechSynthesis 在 iOS Safari 上常静音(系统级 bug),预生成 mp3 后任何设备都能稳定出声。四、前端播放逻辑
function playA(url, text){ // 优先播 mp3
try{ var a = new Audio(url); a.play().catch(function(){ speak(text); }); }
catch(e){ speak(text); } // 失败兜底到合成
}
function speak(t){ /* speechSynthesis */ }
词/音标/例句的 onclick 都调 playA(音频URL, 兜底文本);例句用 CSS ::before{content:"🔊 "} 显示发音图标。
五、数据共享
单文件词库 words-data.js,总词表和自测页动态生成,词库只维护一处:
{b:1, w:"upset", p:"/ʌpˈset/", pos:"v./adj.", m:"使不安;心烦的"}
六、分页导航
[← 上一页] [1] [2] [3] … [当前高亮] … [10] [下一页 →]
当前页 class="pg cur" 高亮;首尾页 prev/next 用 class="pg disabled" 置灰。
七、自动化流程(新增批次)
- 写
wordsN/index.html(onclick 先用speak('text')占位) - 跑脚本:正则提取词+例句 → edge-tts 生成 mp3 → 把
speak()重写为playA() - 更新
words-data.js、计数、索引、本地 md - scp 部署
word_re = re.compile(r'''class="word" onclick="speak\('((?:[^'\\]|\\.)*)'\)"''')
ex_re = re.compile(r'''class="ex-en" onclick="speak\('((?:[^'\\]|\\.)*)'\)"''')
八、部署
cd D:/code_p16v/00_website_wheelfly
KEY=D:/code_p16v/key-cloud-tencent/ROCKY94_LAUNCH/id_ed25519
scp -i "$KEY" -q study/english/wordsN/index.html root@150.158.87.41:/www/wwwroot/wheelfly.cn/study/english/wordsN/index.html
九、易踩坑
| 坑 | 原因 | 解法 |
|---|---|---|
str.replace() 误改所有匹配 | Python 默认替换全部 | 注入函数用唯一锚点 |
| iOS 点发音无声 | speechSynthesis 兼容 bug | 预生成 mp3 |
| Edit 工具 EPERM | Windows 文件锁 | 改用 Python io.open |
| edge-tts 生成慢 | 联网 ~1.5s/文件 | 后台任务跑 |
| 例句撇号 | 破坏 JS 字符串 | onclick 转义,TTS 去转义 |
用 edge-tts 预生成 mp3 + 前端音频优先/合成兜底,解决 iOS 发音痛点;词库单文件共享 + 正则自动化脚本,让 10 批 100 词的分批维护成本极低。