- 播放改为全文拼接成单个 WAV:段间 0.8s/尾部 3s 静音写入文件, audio.loop 原生循环,解决手机锁屏/后台时定时器冻结导致的中断 - 新增"循环"开关与"配乐"开关 - 背景音乐 Web Audio 实时合成:低频 drone 垫底(相邻根音慢滑), 晨钟(大钟非谐泛音簇)+ 暮鼓(膜鸣+击边噪声)+ 引磬稀疏点缀 - deploy.sh 一键部署(rsync + 重启 + 健康检查,不同步 .env) - 新增页签图标与桌面 logo Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2.4 KiB
2.4 KiB
运行手册 · 心经诵读站点
技术栈
| 项 | 版本 / 说明 |
|---|---|
| 前端 | 原生 HTML + CSS + JS(无框架、无构建) |
| 后端 | Python 3 标准库 http.server(无第三方依赖)[Native] |
| TTS | 千问 qwen3-tts-flash,走 DashScope 兼容接口 /api/v1/services/aigc/multimodal-generation/generation |
首次准备
cd "/Users/freedak/Documents/AIDashboard/心经"
cp .env.example .env # 填入真实 DASHSCOPE_API_KEY
.env 变量:DASHSCOPE_API_KEY(必填)、DASHSCOPE_BASE、TTS_MODEL、PORT(默认 8000)。
应用启停
# 启动 [Native]
python3 server.py
# 打开 http://127.0.0.1:8000
# 停止:Ctrl+C
接口
POST /api/tts,请求体{"text": "...", "voice": "Cherry"}(≤600 字),返回audio/wav字节流;合成结果缓存在cache/目录。- 静态文件由同一端口托管。
排错
| 现象 | 原因 | 处理 |
|---|---|---|
| 页面报"未配置 DASHSCOPE_API_KEY" | .env 缺失或键名不对 |
检查 .env |
| 502 / TTS 服务返回 4xx | 密钥失效、音色与模型不匹配 | 换音色或核对密钥 |
| 浏览器播放无声 | 系统静音 / 自动播放策略 | 点击播放按钮触发 |
端口表
| 服务 | 端口 |
|---|---|
| 本地 Web + API | 8000(.env 的 PORT 可改) |
| 线上应用 | 8018(127.0.0.1,仅经 nginx 反代) |
部署备份
线上部署(2026-09-28 已上线):
- 域名:
https://fj.all8ai.top(HTTP 301 → HTTPS,Let's Encrypt 证书自动续期) - 服务器:
154.8.162.18(OpenCloudOS 9.4),应用目录/opt/fj - 进程:
systemctl status|restart fj(/etc/systemd/system/fj.service,Restart=always) - 反代:
/etc/nginx/conf.d/fj.conf→http://127.0.0.1:8018(与 gugong/bs 等站点并存,互不冲突) - 环境变量:服务器上
/opt/fj/.env(PORT=8018、密钥等,不入 Git,也不被 deploy.sh 覆盖) - 更新发布:一键
./deploy.sh(同步前端+server.py→ 重启fj.service→ 健康检查 https://fj.all8ai.top)。密码登录用FJ_PASS=xxx ./deploy.sh(需本机 sshpass);已配 SSH key 则直接./deploy.sh。注意:.env不在同步列表内,服务器端PORT=8018不会被本地PORT=8000覆盖
备份:cache/ 可删(自动重建);/opt/fj 目录 + fj.service + fj.conf 为全部恢复所需。