学讲上海闲话,从跟读开始。 A shadowing-practice web app for learning Shanghainese (Wu Chinese).
在线体验:https://dialect.danielchu.cn —— 游客可浏览全部 300+ 句的沪语正字、吴语拼音、普通话对照与沪语注音表;注册后可听标准音、跟读录音、发音评分。
上海话正在从日常生活里退场,想学的人却很难找到「一句一句跟着读」的工具。跟侬讲把跟读练习做成一个闭环:
听标准音 → 跟读录音 → AB 对比回放 → 发音评分(声调 + 咬字)→ 每日练习队列
- 📚 300+ 句常用上海话:按场景分类(问候寒暄、买物事、乘车问路…),每句配吴语学堂(wugniu/zaonhe)罗马字拼音与普通话对照
- 🔊 标准音跟读:qwen3-tts-flash 沪语音色 Jada 合成 + 教材真人录音混合音源,0.5×–1.5× 变速
- 🎙 录音 AB 对比:跟读录音与标准音逐句对比回放,响度归一化
- 📊 发音评分:pyworld F0 声调 DTW + 中文 wav2vec2 音段相似度,总分/声调/咬字子分、音高曲线对比、字级热力提示
- 🈶 沪语注音表:中派音系 28 声母 / 42 韵母 / 5 声调完整对照,例字可点读
- 🗓 今朝练:待巩固句 + 新句自动组成每日引导队列
- ✍️ 自定义句:普通话输入 → LLM 转沪语正字 → 强制人工确认 → 自动注音 + TTS 合成
- 🌗 深浅色主题 · 移动端优先 · 无组件库 · 公开页预渲染 + JSON-LD(对搜索引擎与 AI 爬虫友好)
Vue 3 + TypeScript + Vite ──── FastAPI + SQLite (WAL)
前端(移动端优先 SPA, ├─ TTS provider 抽象(aliyun / azure / edge / local)
公开页构建时预渲染真 HTML) ├─ 评分管线(PyAV 解码 → pyworld F0 DTW + wav2vec2 相似度)
├─ 吴拼自动注音(吴语学堂 Rime 词典)
└─ 认证/配额/反馈/管理后台/轻量埋点
设计上的几条硬约束:
- 凭证只走环境变量,代码/配置/日志/git 一律不落密钥
- 标准音缓存(audio_cache/)只增不改——音源模型已下线,属不可再生资产
- 用户录音、数据库等个人数据不入 git;埋点不存 IP、不存指纹
- 评分管线全确定性:同一录音重复评分波动为 0
python3 -m venv .venv && .venv/bin/pip install -r backend/requirements.txt
.venv/bin/python import_sentences.py sentences.csv
.venv/bin/uvicorn backend.main:app --port 8000
cd frontend && npm install && npm run dev完整文档(数据管线 / 手机 HTTPS 联调 / 教材导入 / 注音 / 评分标定 / 环境变量)见 docs/开发指南.md。
- 代码:MIT
- 内容(句库文本、注音、注音表等语言数据):CC BY-NC 4.0 —— 署名、非商业使用可自由转载引用
- 语音资产(audio_cache/ 标准音、用户录音)不随仓库分发
为留住一门方言做的一点小事。侬也来讲两句上海闲话伐?